组合索引有最左原则:关于最左原则有太多话要说了,网上大部分的说法都很旧,5.7之后的有了索引下推,导致很多情况下索引都会生效。
创建组合索引 index(a,b,c)
where a=3 只使⽤了a
where a=3 and b=5 使⽤了a,b
where a=3 and b=5 and c=4 使⽤了a,b,c
where a=3 and c=5 and b=4 使⽤了a,b,c (可能是sql执行时自动优化,把B和C条件位置对调了)
where a=3 and c=4 使⽤了a 和索引下推
where a=3 and b>10 and c=7 使⽤了a 和 索引下推
where a=3 and b like 'xx%' and c=7 使⽤了a 和索引下推
where a=3 or a=3 只使⽤了a (sql执行会自动优化成一个条件)
where a=3 or a=4 索引下推
主键索引:唯一 非空 有即为聚簇索引
普通索引:
唯一索引:可空
空间索引:GIS空间数据,通过R树来实现,使得空间搜索变得高效
全文索引(fulltext index):
也就聚集索引,
一般情况下是主键索引
如果没有主键索引,mysql会找到第一个唯一索引作为聚簇索引
如果上述两个都没有, InnoDB 会在包含行 ID 值的合成列上生成一个名为 GEN _ CL UST _ INDEX 的隐藏聚集索引。行由 InnoDB 分配给这样一个表中的行的 ID 排序。行 ID 是一个 6 字节的字段,随着新行的插入,它会单调增加。因此,由行 ID 排序的行实际上是按插入顺序排列的。
除聚簇索引之外的索引都是非聚簇索引。
B-tree索引 聚簇索引
R-tree索引 空间索引
hash索引 准确来说只是用到了hash算法的索引,例如表A有主键列id select id from A where A=2;用到的就是hash算法。