首页 > 其他 > 详细

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

时间:2014-10-29 01:38:08      阅读:256      评论:0      收藏:0      [点我收藏+]

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

 

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

原文:http://www.cnblogs.com/gudi/p/4058411.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!