Mysql添加索引的注意事项:

1、在where子句中经常出现的字段,尤其是大表的字段,应该建立索引

2、经常与其他表进行连接的表,在连接字段上应该建立索引。

3、分组字段或者排序字段也要创建索引

4、选择性高的字段上应该建立索引

5、数据量小的表,没必要用索引。

6、可以为where中经常出现的组合筛选的字段做组合索引,组合索引遵循“最左前缀”的原则。例如name,time做组合索引,则where name或者where name、time索引生效,where time索引失效。s

7、有大量重复数据的列,不适合建立索引,因为值的离散程度太低,就例如性别,就男女,失去了建立索引的意义。

8、避免对经常更新的表创建过多的索引

9、不建议使用无序的值作为索引:

​ 例如身份证、uuid(在索引比较时需要转为ASCII,并且插入时可能会造成页分裂,这些了解即可)、md5、 hash、无序字符串等。

10、不要定义冗余或者重复的索引:

​ 有时候有意或者无意的就对同一个列创建了多个索引,比如index(a,b,c)其相当于index(a) index(a,b) index(a.b,c) .冗余索引只会增加维护的成本,并不会对搜索有什么好处。

alt

我们看到,col1既是主键、又给它定义一个唯一索引,还给它定义一个普通索引,可是主键本身就会生成聚簇索引,所以定义的唯一索引和普通索引是重复的,这种情况应该避免。

索引的分类

1、单列索引(普通索引、唯一索引、主键索引)

​ 1)普通索引:没限制、允许为空、允许重复值

​ 2)唯一索引:允许为空,不允许重复值

​ 3)主键索引:不允许为空,不允许重复值

2、组合索引(联合索引)

​ 遵循最左前缀原则:(a,b,c)创建索引,共有(a),(a,b),(a,b,c)三种索引

3、全文索引

​ InnoDB,MyISAM引擎都能用,只能在CHAR,VARCHAR,TEXT类型的字段上加该索引。主要用来查找文本中的关键字,而不是直接与字段值进行比较,全文索引需要配合match against使用,而不是一般的where like…

4、空间索引

​ 是对空间数据类型的字段建立的索引,空间索引的列必须是not null,只有MyISAM支持该索引