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时,索引有时候会失效(值少的时候)。