MySQL索引(索引失效)

索引

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

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

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

B+tree索引

hash索引

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

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

适合作索引的数据类型

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

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

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

主键索引

唯一索引

普通索引

全文索引

组合索引

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

show index from tableName\G

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.组合索引,中间跳过了某一列,后面的列全失效

猜你喜欢

转载自www.cnblogs.com/duanjiapingjy/p/9416137.html