网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > 数据库技术 > Oracle > 性能调优 > MySQL数据库优化(四)-性能调优  

MySQL数据库优化(四)-性能调优

2008-06-14  作者:bitsCN整理  来源:中国网管联盟  点评 投稿 收藏

  1  MySQL 如何优化 ORDER BY

  在一些情况下,MySQL可以直接使用索引来满足一个 ORDER BY 或 GROUP BY 子句而无需做额外的排序。

网管下载dl.bitscn.com

  尽管 ORDER BY 不是和索引的顺序准确匹配,索引还是可以被用到,只要不用的索引部分和所有的额外的 ORDER BY 字段在 WHERE 子句中都被包括了。下列的几个查询都会使用索引来解决 ORDER BY 或 GROUP BY 部分: 网管u家u.bitscn@com


  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;
网管联盟bitsCN_com

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

网管网www.bitscn.com

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

  SELECT * FROM t1 ORDER BY key1, key2; 网管论坛bbs_bitsCN_com

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

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

网管u家u.bitsCN.com

  •   同时使用了 ASC 和 DESC:

  SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC; 中国网管论坛bbs.bitsCN.com

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

  SELECT * FROM t1 WHERE key2=constant ORDER BY key1; 中国网管联盟bitsCN.com

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

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

网管bitscn_com


TAGs   性能   优化   数据库   记录   索引   使用   如果       数据   MySQL      
 上一篇:Oracle 9i在AIX上的性能调整─内存篇-性能调优   下一篇:MySQL数据库优化(五)-性能调优
MySQL数据库优化(四)-性能调优 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: