MySQL 索引的使用

一、or 的使用

(1)MySQL版本大于 5.x 的会使用 index merge 功能,即可以将多个单列索引集合起来使用,不过在查询时使用 or 的话,引擎为 myisam 的会开启 index merge,而 InnoDB 的则不会开启,从而导致全表搜索;

二、order 的使用

不是 order by 一个设置为索引的字段,这个查询就一定会用到 index ,搞不好会是 using filesort,有几个地方需注意:

(1)如果没有 where 条件,查询的字段没有覆盖到索引(多出一个也不行),order 就会 using filesort,所以选择的字段最好有设置索引,这样才会 using index 来执行;

(2)如果有 where 条件,比如 where type = 1 order by type asc,type 为索引,order 会使用到索引; 如果 where type = 1 order by name asc,即使 type、user 都是索引,也无法使用到索引,依旧是 using filesort;

(3)在没有where 查询的时候 order by id(主键,必须是主键), 有 where 查询的时候,order by (索引) 字段。

三、索引用于函数

(1)where 中字段若用于函数,索引无法起到作用;

四、索引 范围查询

(1)!=、>=、>、<、<=、in、like 等符号使用时均属于范围查询,最左前缀原则在范围查询的字段后面无法起作用;

五、索引长度计算及优化

1、所有的索引字段,如果没有设置not null,则需要加一个字节。

2、定长字段,int占四个字节、date占三个字节、char(n)占n个字符。

3、对于变成字段varchar(n),则有n个字符+两个字节。

4、不同的字符集,一个字符占用的字节数不同。latin1编码的,一个字符占用一个字节,gbk编码的,一个字符占用两个字节,utf8编码的,一个字符占用三个字节。

5、索引长度直接影响索引文件的大小,影响增删改的速度,并间接影响查询速度(占用内存多)

原文地址:https://www.cnblogs.com/linguoguo/p/5175429.html