0.预备
假设我们有表 user (id,name)列
1.联合索引是个什么东西
我们知道,对于表的单列(如id)数据,是可以建立索引的,对于多列(id和name组合,或者,name和id组合),也可以建立索引。联合索引,也称之为组合索引。
先来看单列索引的逻辑结构。
由此得出索引的三个特征:索引有序+高度较低+存储列值
联合索引也满足这三个特征,但这里的逻辑图就不画了,而是以更直观的方式来展现其查找逻辑,这里应注意,联合索引的列有前后,以id列在前、name列在后为例。
建联合索引前的情况
建联合索引后的情况(先按ID排序+再按Name排序)
2.建立联合索引的语法
create index indexName on tableName(column1,column2,...,columnN),如create idx_un_userid_username on user(id,name)
联合索引可以建立多列(列数大于2)的索引,建议列数最多不要越过3列,超过3列,应重新设计表。
3.联合索引的好处
a:避免回表
在执行计划中,table access by index rowid代表是回表动作。
如在user的id列建有索引,select id from user这个不用回表,直接从索引中读取id的值,而select id,name from user中,不能返回除id列其他的值,所以必须要回表。
如果建有了id和name列的联合索引,则可以避免回表。
另外,建立了id和name的联合索引(id列在在前),则select id from user可以避免回表,而不用单独建立id列的单列索引。
b:两个单列查询返回行较多,同时查返回行较少,联合索引更高效。
如果select * from user where id=2 和select * from user where name=‘tom‘ 各自返回的行数比较多,而select * from user where id=2 and name=‘tom‘返回的行数比较少,那么这个时候使用联合索引更加高效。
4.什么时候该用联合索引以及如何设计组合索引更高效
5.联合索引在DML时候的性能分析