MySQL数据库优化(三)

http://tech.ddvip.com   2008年06月11日    社区交流

内容摘要:这个章节讲述了优化程序如何处理 WHERE 子句。例子中使用了 SELECT 语句,但是在 DELETE 和 UPDATE 语句中对 WHERE 子句的优化是一样的。注意,关于MySQL优化的工作还在继续,因此本章节还没结束。MySQL做了很多优化工作,而不仅仅是文档中提到的这些。

  以下是几个常用的提高 MyISAM 表查询速度的忠告:

  想要让MySQL将查询优化的速度更快些,可以在数据表已经加载完全部数据后执行行 ANALYZE TABLE 或运行 myisamchk --analyze 命令。它更新了每个索引部分的值,这个值意味着相同记录的平均值(对于唯一索引来说,这个值则一直都是 1)。MySQL就会在当你使用基于一个非恒量表达式的两表连接时,根据这个值来决定使用哪个索引。想要查看结果,可以在分析完数据表后运行 SHOW INDEX FROM tbl_name 查看 Cardinality 字段的值。myisamchk --description --verbose 显示了索引的分布信息。

  想要根据一个索引来排序数据,可以运行 myisamchk --sort-index --sort-records=1 (如果想要在索引 1 上做排序)。这对于有一个唯一索引并且想根据这个索引的顺序依次读取记录的话来说是一个提高查询速度的好办法。不过要注意的是,第一次在一个大表上做排序的话将会耗费很长时间。

  3. MySQL如何优化 WHERE 子句

  这个章节讲述了优化程序如何处理 WHERE 子句。例子中使用了 SELECT 语句,但是在 DELETE 和 UPDATE 语句中对 WHERE 子句的优化是一样的。注意,关于MySQL优化的工作还在继续,因此本章节还没结束。MySQL做了很多优化工作,而不仅仅是文档中提到的这些。

  MySQL的一些优化做法如下:

  去除不必要的括号:

  ((a AND b) AND c OR (((a AND b) AND (c AND d))))

  -> (a AND b AND c) OR (a AND b AND c AND d)

  展开常量:

  (a

  -> b>5 AND b=c AND a=5

  去除常量条件(在展开常量时需要):

  (B>=5 AND B=5) OR (B=6 AND 5=5) OR (B=7 AND 5=6)

  -> B=5 OR B=6

  常量表达示在索引中只计算一次

作者:叶金荣    责编:豆豆技术应用

正在加载评论...