Mysql 数据库查询优化之索引

索引的原理

参考:http://blog.csdn.net/iefreer/article/details/15815455

索引的分类:

normal:表示普通索引

unique:表示唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号用作索引时,可设置为unique

full textl: 表示 全文搜索的索引。 FULLTEXT 用于搜索很长一篇文章的时候,效果最好。用在比较短的文本,如果就一两行字的,普通的 INDEX 也可以。

怎么合理利用索引

首先利用EXPLAIN分析Mysql是如何处理查询语句,和表之间是如何关联的,并且以什么次序联合。


参数解释:

id:查询的序列号

select_type:查询的类型,包括普通查询(SIMPLE),联合查询,子查询

table:所访问的数据库中表的名称

type:联合查询使用的类型

possible_keys:指出MySQL能使用哪个索引在该表中找到该行,如果这个值是空的,则表示没有相关的所有。

这时要提高性能,可通过检查where子句,看是否引用了哪些字段,或检查字段是否适合索引。

key:显示MySQL实际决定使用的键。如果没有索引被选中,键是NULL

key_len:显示MySQL决定使用的键长度。如果键是null,长度就是null。

ref:显示哪个字段或常熟与key一起被使用

rows:这个值表示mysql要遍历多少数据才能找到所需的结果集,其在innodb上是不准确的

extra:

           using where  :表示用了where限制

           using filesort :一般在用order by 或  group by 排序时出现,意思是无法用索引进行排序,不得不使用相应的算法进行排序。当出现这个时候,说明有问题,要优化。

            using temporary :使用临时表,一般在用order by 或  group by 排序时出现。


其中type显示的类型是重要的指标,结果值从好到坏依次是:system(系统表),const(常量),eq_ref(最多一条匹配结果,通常是通过主键访问)、ref(被驱动表索引引用)、fulltext(全文索引检索)、ref_or_null(带空值的索引查询)、index_merge(合并索引结果集)、unique_subquery(子查询中返回的字段是唯一组合或索引)、index_subquery(子查询返回的是索引,但非主键)、range(索引范围扫描)、index(全索引扫描)、ALL(全表扫描)。

一般来说,保证查询至少达到range级,最好能达到reg级。ALL是全表扫描,是最坏的情况,这种情况往往是没用上索引。


注意

1、每个表的索引应在5个一下

2、当查询需要连接多表时,避免连接只有不到7条数据的表,否则当使用order by 或group by 进行排序时,该表的索引会失效,extra会显示using filesort 。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT界鸟叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值