Mysql索引

来源:互联网 发布:windows开机音效 编辑:程序博客网 时间:2024/06/01 09:44

索引:是针对数据所建立的目录.

作用可以加快查询速度

负面影响降低了增删改的速度.

索引的创建原则:

1:不要过度索引

2:where条件最频繁的列上加.在重复度高的列上不加,比如性别男女;

3:尽量索引散列值,过于集中的值加索引意义不大.

 

索引的类型

普通索引: index 仅仅是加快查询速度.

唯一索引: unique index 行上的值不能重复

主键索引: primary key 不能重复.

主键必唯一,但是唯一索引不一定是主键.

一张表上,只能有一个主键但是可以用一个或多个唯一索引.

全文索引 : fulltext index mysql的默认情况下对于中文意义不大.一般使用第三方解决方案

因为英文有空格,标点符号来拆成单词,进而对单词进行索引.

而对于中文,没有空格来隔开单词,mysql无法识别每个中文词.

(上述3种索引,都是针对列的值发挥作用,但全文索引,可以针对值中的某个单词,比如一篇文章,)全文索引不针对非常频繁的词做索引,this, is, you, my等等.

索引长度:指定一列部分内容作为索引

多列索引:两列或多列值看做整体,当做索引。在英文网站时,first namelast name当做一个整体,此时,where条件中只有first name可以发挥作用,last name 没有发挥作用,这就是作为的左前缀规则。

冗余索引:某列有多个索引,例如在上面last name上再次建立索引。




使用索引的注意事项

说明,如果我们的表中有复合索引(索引作用在多列上), 此时我们注意:

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估计使用全表扫描要比使用索引快,则不使用索引。



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

show status like ‘Handler_read%’;

 

大家可以注意:
handler_read_key:这个值越高越好,越高表示使用索引查询到的次数。

handler_read_rnd_next:这个值越高,说明查询低效。



0 0
原创粉丝点击