MYSQL索引类型以及失效原因

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

MYSQL索引类型以及失效原因

上一篇:mybatis(九)动态SQL


下一篇:JDBC操作数据库Date类型数据