总结自韩顺平老师教学
速度变快是因为搜索引擎的选择,一般是Btree,二叉树的话是logn的时间复杂度;
索引失效的总结。以下是具体描述。
原理示意图:
.
索引使用的注意事项
索引的代价:
- 占用磁盘空间
- 对dml操作有影响,变慢
- 在哪些列上适合添加索引?
总结: 满足以下条件的字段,才应该创建索引.
a: 肯定在where条经常使用 b: 该字段的内容不是唯一的几个值(sex) c: 字段内容不是频繁变化.
索引失效的注意事项
(很多都是最左原则)
把dept表中,我增加几个部门:
alter table dept add index my_ind (dname,loc); // dname 左边的列,loc就是右边的列
说明,如果我们的表中有复合索引(索引作用在多列上), 此时我们注意:
- 对于创建的多列索引,只要查询条件使用了最左边的列,索引一般就会被使用。
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,如果列类型是字符串,那一定要在条件中将数据使用引号引用起来。否则不使用索引。(添加时,字符串必须’’), 也就是,如果列是字符串类型,就一定要用 ‘’ 把他包括起来.
如果mysql估计使用全表扫描要比使用索引快,则不使用索引。
explain 可以帮助我们在不真正执行某个sql语句时,就执行mysql怎样执行,这样利用我们去分析sql指令.