Mysql常见索引类别有:主键索引、唯一索引、普通索引、全文索引、组合索引(也有称为复合索引)
- PRIMARY KEY(主键索引) ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
- UNIQUE(唯一索引) ALTER TABLE `table_name` ADD UNIQUE (`column`)
- INDEX(普通索引) ALTER TABLE `table_name` ADD INDEX index_name ( `column` )
- FULLTEXT(全文索引) ALTER TABLE `table_name` ADD FULLTEXT ( `column` )
- 组合索引 ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )
Mysql各种索引区别:
- 普通索引:最基本的索引,没有任何限制
- 唯一索引:与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。
- 主键索引:它 是一种特殊的唯一索引,不允许有空值。
- 全文索引:仅可用于 MyISAM 表,针对较大的数据,生成全文索引很耗时好空间。
- 组合索引:为了更多的提高mysql效率可建立组合索引,遵循”最左前缀“原则。
最左前缀原则:顾名思义,最左优先,比如,我们建立了一个以(a,b,c)为组合的索引,那么将会得到:a, ab,abc三种索引。
若我们按列“b”进行查找,或者按列(bc)查找,都不会使用到索引,只有以上三种索引可以使用。
哪些情况索引会失效:
- like查询是以%开头
- 查询条件使用or的话,要保证or两边的列都要有索引,否则索引失效(对没有索引的列会全表扫描)
- 组合索引 不满足最左前缀要求,索引失效
- 索引列字符串类型,WHERE条件为数字型时,索引失效
- 在索引字段上使用 not 、!= 时会失效
- 如果mysql估计使用全表扫描要比使用索引快,则不使用索引
- 在索引字段使用is null 或 is not null时,索引有时候会失效(值少的时候)。