Mysql索引

索引:是针对数据所建立的文件夹.

作用能够加快查询速度

负面影响减少了增删改的速度.

索引的创建原则:

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查询时,关键的 ‘keyword’ , 最前面,不能使用 或者 _这种字符.。 假设一定要前面有变化的值,则考虑使用 全文索引->sphinx.

3。 假设条件中有or。即使当中有条件带索引也不会使用。

换言之,就是要求使用的全部字段,都必须建立索引我们建议大家尽量避免使用or keyword

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:这个值越高,说明查询低效。



原文地址:https://www.cnblogs.com/yutingliuyl/p/6882386.html