索引的注意事项和原理分析
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:这个值越高,说明查询低效。
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:这个值越高,说明查询低效。
相关文章推荐
- 索引的原理及索引建立的注意事项
- 索引的原理及索引建立的注意事项
- 索引的原理及索引建立的注意事项
- sqlserver索引的原理及索引建立的注意事项小结
- PDO防注入原理分析以及使用PDO的注意事项
- PDO防注入原理分析以及注意事项
- 【荐】PDO防 SQL注入攻击 原理分析 以及 使用PDO的注意事项
- PDO防注入原理分析以及使用PDO的注意事项 (转)
- PDO防注入原理分析以及使用PDO的注意事项
- PDO防注入原理分析以及使用PDO的注意事项
- PDO防注入原理分析以及使用PDO的注意事项
- PDO防注入原理分析以及注意事项
- PDO防注入原理分析以及使用PDO的注意事项
- sqlserver索引的原理及索引建立的注意事项小结
- PDO防注入原理分析以及使用PDO的注意事项
- PDO防注入原理分析以及使用PDO的注意事项
- PDO防注入原理分析以及注意事项
- [转载]PDO防注入原理分析以及使用PDO的注意事项
- PDO防注入原理分析以及使用PDO的注意事项
- sqlserver索引的原理及索引建立的注意事项小结