频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

MySQL数据库优化(四)

来源:IT专家网 作者:叶金荣 出处:巧巧读书 2008-06-16 进入讨论组
下一页 1 2 3 4 5 6 

  1  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=constant ORDER BY key_part2;
  SELECT * FROM t1 WHERE key_part1=constant GROUP BY key_part2;
  SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 DESC;
  SELECT * FROM t1
  WHERE key_part1=1 ORDER BY key_part1 DESC, key_part2 DESC;

  在另一些情况下,MySQL无法使用索引来满足 ORDER BY,尽管它会使用索引来找到记录来匹配 WHERE 子句。这些情况如下:

  •   对不同的索引键做 ORDER BY :

  SELECT * FROM t1 ORDER BY key1, key2;

  •   在非连续的索引键部分上做 ORDER BY:

  SELECT * FROM t1 WHERE key2=constant ORDER BY key_part2;

  •   同时使用了 ASC 和 DESC:

  SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC;

  •   用于搜索记录的索引键和做 ORDER BY 的不是同一个:

  SELECT * FROM t1 WHERE key2=constant ORDER BY key1;

  •   有很多表一起做连接,而且读取的记录中在 ORDER BY 中的字段都不全是来自第一个非常数的表中(也就是说,在 EXPLAIN 分析的结果中的第一个表的连接类型不是 const)。
  •   使用了不同的 ORDER BY 和 GROUP BY 表达式。
  •   表索引中的记录不是按序存储。例如,HASH 和 HEAP 表就是这样。

  通过执行 EXPLAIN SELECT ... ORDER BY,就知道MySQL是否在查询中使用了索引。如果 Extra 字段的值是 Using filesort,则说明MySQL无法使用索引。当必须对结果进行排序时,MySQL 4.1 以前它使用了以下 filesort 算法:

更多文章 更多内容请看系统优化大全MySQL数据备份MySQL专题,或进入讨论组讨论。
下一页 1 2 3 4 5 6 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章