飞嗨,欢迎您的光临,本博所发布之文章皆为作者亲测通过,如有错误,欢迎通过各种方式指正。(本博已于2015.12.6升级到php7,运行环境php7 php-fpm + nginx1.8.0)

mysql索引问题

MySQL lf 1035℃ 0评论

提高数据库性能,建立索引是最物美价廉的方法了。但是,建立了索引,在select要用得上索引,若sql语句没有使用上索引,那就得不偿失了,反而浪费了存储空间,以及增加了在insert update delete时重建索引的开销。本文列举使用索引需要注意的情况

查询索引使用的频率使用  show status like ‘handler_read%';
handler_read_key这个值越高越好,越高表示使用索引查询到的次数
handler_read_rnd_next这个值越高,说明查询低效
查看表索引  show index from tablename
explain select…

索引失效的情况:
1.若条件中有or,即使其中有条件带有索引也不会使用(除非每个or条件中的列都有索引)
2.对于多列索引,不是使用的第一部分,则不会使用索引
3.like查询,%开头索引失效,%结尾可以使用索引
4.如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引
5.若mysql估计使用全表扫描要比使用索引快,则不使用索引
6.不可用到索引的操作符<> , not in , !=  (可以用到索引的操作符可用到索引的操作符> <= = > >= between in)
7.null会导致索引形同虚设,在设计表结构时应避免null的存在,用其他比如-1来表示null

其他不可使用索引的情况 对列进行函数运算的情况(如where md5(password)=’xxx’)
where index=1 or a=10
存了数值的字符串类型(如手机号),查询时丢了引号

不适合使用索引的情况
1.数据的(增删改)都需要维护索引
2.索引以为着需要更多的空间
3.过小的表
4.列的值唯一性太小(如:性别 类型),(同值的数据超过表的15%)
5.太长的列,可以选择只建立部分索引(如:只取前十位做索引)
6.更新非常频繁的数据不适合建索引

建立索引需要注意
text类型,也可建索引(需指定长度)
myisam存储引擎索引键长度综合不能超过1000字节
用来筛选的值尽量保持和索引列同样的数据类型

联合索引
一次查询不能使用多个索引
多列查询该如何建索引:要么a要么b,当然联合索引也是个不错的解决方案,ab还是ba
where a=’xxx’可以使用ab联合索引
where b=’xxx’则用不到联合索引
大多数情况下,有ab索引了,就可以不用再去建a索引了

转载请注明:飞嗨 » mysql索引问题

喜欢 (0)or分享 (0)
发表我的评论
取消评论
表情
粤ICP备15018643号-1