索引最左前缀匹配

最左前缀原理


联合索引中查找遵循最左前缀原理:
例如,建立如下(a,b,c,d)的联合索引,索引结构会按照a,b,c,d的顺序依次排序建立索引。
输入查询条件:a,b,c,d 可以全部利用索引
输入查询条件:a,b,d 仅可以利用a,b部分索引
输入查询条件:b,c,d 无法利用索引
输入查询条件包括范围查询时,范围列可以用到索引,范围列后面的无法用到索引。
查询条件有函数或表达式时不会用到索引,比如left(String)。
查询条件中字符串为Like匹配时:“abcd%”可以用到索引。

索引选择性


索引的选择性较低时不建议建索引。
所谓索引的选择性(Selectivity),是指不重复的索引值(也叫基数,Cardinality)与表记录数(#T)的比值:
Index Selectivity = Cardinality / #T:

主键优化


在使用InnoDB存储引擎时,如果没有特别的需要,请永远使用一个与业务无关的自增字段作为主键。
InnoDB使用聚集索引,数据记录本身被存于主索引(一颗B+Tree)的叶子节点上。这就要求同一个叶子节点内(大小为一个内存页或磁盘页)的各条数据记录按主键顺序存放,因此每当有一条新的记录插入时,MySQL会根据其主键将其插入适当的节点和位置,如果页面达到装载因子(InnoDB默认为15/16),则开辟一个新的页(节点)。
如果表使用自增主键,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页。这样就会形成一个紧凑的索引结构,近似顺序填满。由于每次插入时也不需要移动已有数据,因此效率很高,也不会增加很多开销在维护索引上。

你可能感兴趣的:(索引最左前缀匹配)