您的位置:首页 > 数据库 > MySQL

索引的注意事项和原理分析

2017-11-25 13:59 495 查看
索引的原理(注意事项)

1:哪些列适合创建索引

较频繁的作为查询条件字段应该创建索引

select * from emp where empno = 1

唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件

select * from emp where sex = '男‘ -->性别就男,女,二叉树都是平级,就两个数据,没有意义

更新非常频繁的字段不适合创建索引

select * from emp where logincount = 1

不会出现在WHERE子句中字段不该创建索

2:小结

1:肯定在where条件经常使用

2:该字段的内容不是唯一的几个值(性别)

3:字段内容不是经常变化的(例如状态字段)

4:创建索引文件会占用磁盘

5:对DML语句(update,delete,insert)的效率有影响(变慢)

删除编号11记录后,索引11(@B-Tree二叉树原理图)已将删除后,二叉树要重整,所以索引文件要重组,速度变慢,但是网站建设9成都是再做查询操作,所以这点牺牲是值得的

3:注意问题

1:explain select * from dept where loc='aaa'\G 就不会使用到索引

2:对于使用like的查询,查询如果是  ‘%aaa’ 不会使用到索引‘aaa%’会使用到索引。 

比如: explain select * from dept where dname like '%aaa'\G,不能使用索引,即,在like查询时,关键的 ‘关键字’ , 最前面,不能使用 % 或者 _这样的字符., 如果一定要前面有变化的值,则考虑使用 全文索引->sphinx.

3:如果条件中有or,即使其中有条件带索引也不会使用。换言之,就是要求使用的所有字段,都必须建立索引, 我们建议大家尽量避免使用or 关键字

select * from dept where dname=’xxx’ or loc=’xx’ or deptno=45

4:如果列类型是字符串,那一定要在条件中将数据使用引号引用起来。否则不使用索引。(添加时,字符串必须’’), 也就是,如果列是字符串类型,就一定要用 ‘’ 把他包括起来.

5:如果mysql估计使用全表扫描要比使用索引快,则不使用索引。

4:explain 分析

可以帮助我们在不真正执行某个sql语句时,就执行mysql怎样执行,这样利用我们去分析sql指令.

 如何查看索引使用的情况:

show status like ‘Handler_read%’; 

大家可以注意:

handler_read_key:这个值越高越好,越高表示使用索引查询到的次数。

handler_read_rnd_next:这个值越高,说明查询低效。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息