码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-10-29 01:39:24      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:style   color   使用   sp   strong   数据   on   bs   line   

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

 

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

标签:style   color   使用   sp   strong   数据   on   bs   line   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!