WEB开发网
开发学院数据库MySQL MySQL查询优化程序 阅读

MySQL查询优化程序

 2006-04-07 10:45:38 来源:WEB开发网   
核心提示: ■ 测试查询的其他形式,而且不止一次地运行它们,MySQL查询优化程序(4),在测试一个查询的其他形式时,应该每种方法运行几次,不过只对MyISAM 表(MySQL3.23 以上的版本可用)有效,而对于ISAM 表,如果对两个不同方法中的每种只运行查询一次,通常会发现第二个查询更快

■ 测试查询的其他形式,而且不止一次地运行它们。在测试一个查询的其他形式时,应该每种方法运行几次。如果对两个不同方法中的每种只运行查询一次,通常会发现第二个查询更快,因为来自第一个查询的信息在磁盘高速缓存中,不需要实际从磁盘上读出。还应该尽量在系统负载相对平稳的时候运行查询,以避免受系统中其他活动的影响。

2 忽略优化

这可能听起来有点奇怪,但在以下情况中,要废除MySQL的优化功能:
强迫MySQL慢慢地删除表的内容。在需要完全删空一个表时,利用无WHERE 子句的DELETE 语句删除整个表的内容是最快的,如下所示:
 DELETE FROM tb1_name
MySQL对这种特殊情况的DELETE 进行优化;它利用表信息文件中的表说明从头开始创建空数据文件和索引文件。这种优化使DELETE 操作极快,因为MySQL无需单独地删除每一行。但在某些情况下,这样做会产生一些不必要的负作用:

■ MySQL报告所涉及的行数为零,即使表不为空也是如此。很多时候这没有关系(虽然,如果事先没有思想准备,会感到困惑不解),但对于那些确实需要知道真实行数的应用程序来说,这是不恰当的。

■ 如果表含有一个AUTO_INCREMENT 列,则该列的顺序编号会以1从头开始。这是真实的事情,即使在MySQL3.23 中对AUTO_INCREMENT 的处理进行了改进后也是这样。关于这个改进的介绍请参阅第2章中的“使用序列”小节。可增加WHERE 1> 0 子句对DELETE 语句“不优化”。
 DELETE FROM tb1_name WHERE 1> 0
这迫使MySQL进行逐行的删除。相应的查询执行要慢得多,但将返回真正删除的行数。它还将保持当前的AUTO_INCREMENT 序列的编号,不过只对MyISAM 表(MySQL3.23 以上的版本可用)有效。而对于ISAM 表,序列仍将重置。

上一页  1 2 3 4 5  下一页

Tags:MySQL 查询 优化

编辑录入:coldstar [复制链接] [打 印]
赞助商链接