首页 > 代码库 > 【索引】联合索引的基本知识

【索引】联合索引的基本知识

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时候的性能分析

 

【索引】联合索引的基本知识