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

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

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

  索引用于快速找到特定一些值的记录。如果没有索引,MySQL就必须从第一行记录开始读取整个表来检索记录。表越大,资源消耗越大。如果在字段上有索引的话,MySQL就能很快决定该从数据文件的哪个位置开始搜索记录,而无须查找所有的数据。如果表中有1000条记录的话,那么这至少比顺序地读取数据快100倍。注意,如果需要存取几乎全部1000条记录的话,那么顺序读取就更快了,因为这样会使磁盘搜索最少。 网管联盟bitsCN@com

  大部分MySQL索引(PRIMARY KEY, UNIQUE,INDEX 和 FULLTEXT)都是以B树方式存储。只有空间类型的字段使用R树存储,MEMORY (HEAP)表支持哈希索引。 网管u家u.bitscn@com

  字符串默认都是自动压缩前缀和后缀中的空格。

网管网www.bitscn.com

  通常,如下所述几种情况下可以使用索引。哈希索引(用于 MEMORY 表)的独特之处在后面会讨论到。

网管联盟bitsCN@com

  想要尽快找到匹配 WHERE 子句的记录。

中国网管联盟bitsCN.com

  根据条件排除记录。如果有多个索引可共选择的话,MySQL通常选择能找到最少记录的那个索引。

网管bitscn_com

  做表连接查询时从其他表中检索记录。 网管联盟bitsCN@com

  想要在指定的索引字段 key_col 上找到它的 MIN() 或 MAX() 值。优化程序会在检查索引的 网管bitscn_com

  key_col 字段前就先检查其他索引部分是否使用了 WHERE key_part_# = constant 子句。这样的话, 网管联盟bitsCN@com

  MySQL会为 MIN() 或 MAX() 表达式分别单独做一次索引查找,并且将它替换成常数。当所有的表达式都被替换成常数后,查询就立刻返回。如下: 网管u家u.bitsCN.com

  SELECT MIN(key_part2),MAX(key_part2) FROM tbl_name WHERE key_part1=10;

中国网管论坛bbs.bitsCN.com

  对表作排序或分组,当在一个可用的最左前缀索引上做分组或排序时(如 ORDER

网管联盟bitsCN@com

  BY key_part1, key_part2)。如果所有的索引部分都按照 DESC 排序,索引就按倒序排序。

网管网www_bitscn_com

  有些时候,查询可以优化使得无需计算数据就能直接取得结果。当查询使用表中的一个数字型字段,且这个字段是索引的最左部分,则可能从索引树中能很快就取得结果: 网管u家u.bitsCN.com


  SELECT key_part3 FROM tbl_name WHERE key_part1=1

网管联盟bitsCN_com

  假设有如下 SELECT 语句: 网管网www_bitscn_com


  mysql> SELECT * FROM tbl_name WHERE col1=val1 AND col2=val2;
网管下载dl.bitscn.com

  如果在 col1 和 col2 上有一个多字段索引的话,就能直接取得对应的记录了。如果在 col1 和 col2 分别有独立的索引,那么优化程序会先找到限制最多的那个索引,然后根据哪个索引能找到更少的记录就决定使用哪个索引。

网管bitscn_com

中国网管联盟bitsCN.com


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

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