表中最多只有一行匹配的记录,它在查询一开始的时候就会被读取出来。由于只有一行记录,在余下的优化程序里该行记录的字段值可以被当作是一个恒定值。const 表查询起来非常快,因为只要读取一次!const 用于在和 PRIMARY KEY 或 UNIQUE 索引中有固定值比较的情形。下面的几个查询中,tbl_name 就是 const 表了:SELECT * FROM tbl_name WHERE primary_key=1;SELECT * FROM tbl_nameWHERE primary_key_part1=1 AND primary_key_part...
7.2.12 加速 INSERT插入一条记录花费的时间由以下几个因素决定,后面的数字大致表示影响的比例:连接:(3)发送查询给服务器:(2)解析查询:(2)插入记录:(1 x 记录大小)插入索引:(1 x 索引数量)关闭:(1)这里并没有考虑初始化时打开数据表的开销,因为每次运行查询只会做这么一次。如果是 B-tree 索引的话,随着索引数量的增加,插入记录的速度以 log N 的比例下降。可以使用以下几种方法来提高插入速度:如果要在同一...
可以在锁表后,一起执行几个语句来加速 INSERT 操作:LOCK TABLES a WRITE;INSERT INTO a VALUES (1,23),(2,34),(4,33);INSERT INTO a VALUES (8,26),(6,29);UNLOCK TABLES;这对性能提高的好处在于:直到所有的 INSERT 语句都完成之后,索引缓存一次性刷新到磁盘中。通常情况是,多有少次 INSERT 语句就会有多数次索引缓存刷新到磁盘中的开销。如果能在一个语句中一次性插入多个值的话,显示的锁表操作也就没必要了。对事务表而言,...
连接类型跟 ALL 一样,不同的是它只扫描索引树。它通常会比 ALL 快点,因为索引文件通常比数据文件小。MySQL在查询的字段知识单独的索引的一部分的情况下使用这种连接类型。ALL将对该表做全部扫描以和从前一个表中取得的记录作联合。这时候如果第一个表没有被标识为 const 的话就不大好了,在其他情况下通常是非常糟糕的。正常地,可以通过增加索引使得能从表中更快的取得记录以避免 ALL。possible_keyspossible_keys 字段是指MySQ...
通常地,应该保存所有的冗余数据(在数据库原理中叫做"第三范式")。然而,为了能取得更高的效率复制一些信息或者创建摘要表也是划算的。存储过程或者 UDFs(用户定义函数) 的方式在执行一些任务时可能性能更高。尽管如此,当数据库不支持这些特性时,还是有其他的替代方法可以达到目的,即使它们有点慢。可以从查询缓存或应答中取得结果,然后将很多次的插入及更新操作放在一起做。如果数据库支持表锁(如MySQL和ORACLE),那么这...
下面的例子展示了如何通过 EXPLAIN 提供的信息来较大程度地优化多表联合查询的性能。假设有下面的 SELECT 语句,正打算用 EXPLAIN 来检测:EXPLAIN SELECT tt.TicketNumber, tt.TimeIn, tt.ProjectReference, tt.EstimatedShipDate, tt.ActualShipDate, tt.ClientID, tt.ServiceCodes, tt.RepetitiveID, tt.CurrentProcess, tt.CurrentDPPerson, tt.RecordVolume, tt.DPPr...
7.2.9 MySQL 如何优化 ORDER BY在一些情况下,MySQL可以直接使用索引来满足一个 ORDER BY 或 GROUP BY 子句而无需做额外的排序。尽管 ORDER BY 不是和索引的顺序准确匹配,索引还是可以被用到,只要不用的索引部分和所有的额外的 ORDER BY 字段在 WHERE 子句中都被包括了。下列的几个查询都会使用索引来解决 ORDER BY 或 GROUP BY 部分:SELECT * FROM t1 ORDER BY key_part1,key_part2,... ;SELECT * FROM t1 WHERE key_part1=con...
想要提高 ORDER BY 的速度,首先要看MySQL能否使用索引而非额外的排序过程。如果不能使用索引,可以试着遵循以下策略:增加 sort_buffer_size 的值。增加 read_rnd_buffer_size 的值。修改 tmpdir,让它指向一个有很多剩余空间的专用文件系统。如果使用MySQL 4.1或更新,这个选项允许有多个路径用循环的格式。各个路径之间在 Unix 上用冒号(:)分隔开来,在 Windows,NetWare以及OS/2 上用分号(;)。可以利用这个特性将负载平均分...
6.5 不同MySQL版本之间的同步兼容性 最早的二进制格式是在MySQL 3.23中开发出来的。在MySQL 4.0中改进了,MySQL 5.0又改进了。在配置同步时需要升级服务器的话,它们之间的因果关系在"6.6 Upgrading a Replication Setup"中描述了。如果只关心同步,任何MySQL 4.1.x版本和MySQL 4.0.x是一样的,因为它们都使用相同格式的二进制日志。所以,这些版本是互相兼容的,它们之间可以无缝地运行同步。一个例外的情况是,MySQL 4.0.0到4.0....
6.4 设置同步 以下描述了如何快速设置MySQL同步服务器。假设你打算同步全部的数据库,并且之前没有设置过。需要关闭master服务器以完成全部的步骤。本章描述的过程可以用于一个slave的情况,也可以用于多个slave的情况。这只是一个最直接设置slave的办法,并不是只有一个。例如,已经有了master的数据快照(snapshot),master已经设置了服务器编号ID(server_id)并且启用了二进制日志,这就无需关闭master或者阻止在master上更新数据...
6 MySQL 同步 同步功能在MySQL 3.23.15就开始引进了,它可以把一个MySQL服务器上的数据复制到另一个服务器上去。本章描述了MySQL的各种复制特性。介绍了同步的概念,如何设置同步服务器,以及可用服务器的参照。还提供了一系列的常见问题及其答案,疑难解答。"14.6 Replication Statements"中介绍了同步相关的SQL语句语法。我们建议经常访问"http://www.mysql.com"经常阅读本章的最新内容。同步功能一直在改进,我们经常把这部分的...
作为Web开发人员,在机器上安装不同版本的php,apache和mysql有时是很有必要的。 今天,我在调试一套PHP程序的时候,该程序中使用的某些函数在低版本中无法使用,所以只能在搞个高版本的php。 以下是我成功配置后的截图 不同版本的PHP:不同版本的Apache:这里我以安装php5.3.10为例进行说明 操作方法: 托盘图标左击 -> PHP -> Version -> 选择Get more...->打开网页后,就能看到以下截图:然后,点击PHP(红色框框部分)我这里...
WampServer下安装多个版本的PHP、mysql、apache图文教程, 今天,我在调试一套PHP程序的时候,该程序中使用的某些函数在低版本中无法使用,所以只能在搞个高版本的php。 作为Web开发人员,在机器上安装不同版本的php,apache和mysql有时是很有必要的。 以下是我成功配置后的截图 不同版本的PHP:不同版本的Apache:这里我以安装php5.3.10为例进行说明 操作方法: 托盘图标左击 -> PHP -> Version -> 选择Get more...->打开网页后...
Windows和Linux下查看Apache、MySQL、PHP版本,apachemysql# Windows查看Apache版本: 使用命令:httpd -v# Linux查看Apache版本: 使用命令:apachectl -v# Windows查看MySQL版本: 使用命令:mysql --version# Linux查看MySQL版本: 使用命令:mysql -V# Windows查看PHP版本: 使用命令:php -v# Linux查看PHP版本: 使用命令:php -vhttp://www.bkjia.com/PHPjc/1138822.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/11388...
发现mysql_real_escape_string() 在不同php版本中表现不同。网上看安全开发文档的时候,文档中说,正确使用mysql_real_escape_string()前需要指定mysql连接字符集即使用mysql_set_charset()函数,如果不指定字符集且使用的字符编码是类似GBK的宽字符,可能导致宽字符注入。这里我做了一个小实验,只使用了mysql_real_escape_string(),未使用mysql_set_charset()函数指定当前连接字符集,在php版本为5.2.17时,可以宽字符注入成功;...