MySQL索引(索引失效)

Posted dddjp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL索引(索引失效)相关的知识,希望对你有一定的参考价值。

索引

索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。

 

myisam存储引擎,数据文件、索引文件、表结构文件分开存储

innodb存储引擎,数据和索引存储在一个文件中

B+tree索引

hash索引

 

hash索引(只有memory存储引擎支持),查找一条记录的速度非常快

B+tree索引(Innodb和MyISAM支持),更适合排序等操作

 

适合作索引的数据类型

(1)较小的数据类型,需要更少的空间

(2)简单的数据类型,整型比字符串开销小

(3)避免使用null,null会导致索引失效

 

主键索引

唯一索引

普通索引

全文索引

组合索引

 

显示当前表的所有索引信息

show index from tableNameG

 

1.普通索引

create index idx_name on tableName(colName(length))

如果是char或者varchar length可以小于实际的长度,如果是blob和text 必须指定length

alter table tableName add index idx_name(colName)

drop index idx_name on tableName

一张表可以有多个普通索引

2. 唯一索引

列的值必须唯一,允许用null值

如果是组合索引,列的值的组合必须唯一

create union index idx_name on tableName(colName)

alter table table_name add unique idx_name(colName)

一张表可以有多个唯一索引

3.主键索引

主键的数据类型最好为整型

主键索引只能有一个

主键列的值必须唯一并且不能是null

自动增长的列一定是主键

主键列不一定是自动增长的

alter table tableName add primary key(col_name)

4.全文索引

innodb不支持

alter table tableName add fulltext idx_name(col_name)

 

 

 

索引失效

1.最佳左前缀原则

组合索引,不按索引定义时制定的顺序 的最左列开始

2.like ‘%Z’ 

like模糊查询时, 以%开头,导致索引失效

3.范围之后全失效

4.遇到null值,索引失效

5.索引列上的显式或者隐式运算,导致索引失效

6.order by

由于查询只使用一个索引,因此,如果where语句使用了索引,order by语句不会使用

7.不在一个方向的order by导致索引失效

全asc 或 全desc

8.组合索引,中间跳过了某一列,后面的列全失效

 

以上是关于MySQL索引(索引失效)的主要内容,如果未能解决你的问题,请参考以下文章

mysql 避免索引失效

mysql 索引失效的原因都有哪些

#yyds干货盘点#MySQL索引优化系列:索引失效

MySQL索引优化系列:索引失效

MySQL高级篇——索引失效案例

MySQL高级篇——索引失效案例