複合索引 一、概念: 單一索引是指索引列為一列的情況,即新建索引的語句只實施在一列上; 用戶可以在多個列上建立索引,這種索引叫做複合索引(組合索引); 複合索引在資料庫操作期間所需的開銷更小,可以代替多個單一索引; 同時有兩個概念叫做窄索引和寬索引,窄索引是指索引列為1-2列的索引,寬索引也就是索引 ...
複合索引
一、概念:
單一索引是指索引列為一列的情況,即新建索引的語句只實施在一列上;
用戶可以在多個列上建立索引,這種索引叫做複合索引(組合索引);
複合索引在資料庫操作期間所需的開銷更小,可以代替多個單一索引;
同時有兩個概念叫做窄索引和寬索引,窄索引是指索引列為1-2列的索引,寬索引也就是索引列超過2列的索引;
設計索引的一個重要原則就是能用窄索引不用寬索引,因為窄索引往往比組合索引更有效;
二、使用:
創建索引
create index idx1 on table1(col1,col2,col3)
查詢
select * from table1 where col1= A and col2= B and col3 = C
這時候查詢優化器,不在掃描表了,而是直接的從索引中拿數據,因為索引中有這些數據,這叫覆蓋式查詢,這樣的查詢速度非常快;
三、註意事項:
1、對於複合索引,在查詢使用時,最好將條件順序按找索引的順序,這樣效率最高;
select * from table1 where col1=A AND col2=B AND col3=D
如果使用 where col2=B AND col1=A 或者 where col2=B 將不會使用索引
2、何時是用複合索引
根據where條件建索引是極其重要的一個原則;
註意不要過多用索引,否則對錶更新的效率有很大的影響,因為在操作表的時候要化大量時間花在創建索引中
3、複合索引會替代單一索引麽
如果索引滿足窄索引的情況下可以建立複合索引,這樣可以節約空間和時間
四、備註:
一般情況下:對一張表來說,如果有一個複合索引 on (col1,col2),就沒有必要同時建立一個單索引 on col1;
特殊情況:如果查詢條件需要,可以在已有單索引 on col1的情況下,添加複合索引on (col1,col2),對於效率有一定的提高。(當查詢極多,更改極少的情況下,為減少查詢消耗,可以考慮損失一些更改消耗)。
同時建立多欄位(包含5、6個欄位)的複合索引沒有特別多的好處,相對而言,建立多個窄欄位(僅包含一個,或頂多2個欄位)的索引可以達到更好的效率和靈活性
create table T_Test ( ID int identity, TypeID smallint not null, DKey smallint not null, DValue nvarchar(50) not null, Comment nvarchar(100) null, constraint PK_T_Test primary key (ID) ) go create unique index IX_Test on T_Test ( TypeID ASC, DKey ASC ) go insert into T_Test(TypeID, DKey, DValue) values(1,1,'普通用戶') insert into T_Test(TypeID, DKey, DValue) values(1,2,'管理員') insert into T_Test(TypeID, DKey, DValue) values(1,2,'管理員22') select *from T_Test--第三天插入語句報錯,因為插入的數據中的TypeID和 DKey不能都相等,只能某一個相等或者兩者都不相等。 道理類似:複合主鍵。 轉載來源:https://blog.csdn.net/kangbin825/article/details/54646110 https://www.cnblogs.com/summer0space/p/7247778.html