索引鍵列和包含性列

2022-02-15 07:23:01 字數 719 閱讀 7791

1、主鍵必須是唯一性的,不一定就是聚集索引,我們在建立主鍵時預設是設主鍵為聚集索引。可通過手動刪除後重新建聚集索引。

2、sql語句是where先執行,然後再執行order by,所以我們在建非聚集索引時要注意順序並且where與order by裡面的列都要在索引鍵列裡面。select部份可以放在包含性列裡面,但請注意索引大小的空間問題。

3、order by裡面的公升序和降序問題一定要和索引鍵列裡面的一樣。

例:select id,title from table1 where classid=123 order by created desc

情況一操作:建非聚集索引ix_a->索引鍵列為classid(公升序降序無所謂)、created(一定要降序) 

注意索引鍵列中兩個欄位的先後順序,兩個鍵列缺一不可。

執行:1.ix_a索引查詢出id,2.根據id通過 鍵查詢 找出title->返回結果

情況二操作:建非聚集索引ix_b->索引鍵列為classid(公升序降序無所謂)、created(一定要降序) ->新增包含性列id,title

注意索引鍵列中兩個欄位的先後順序,兩個鍵列缺一不可。

執行:1.ix_b索引查詢->返回結果

以上兩個方法如果created的排序弄錯了,還將多一步,即:

情況一:1.ix_a索引查詢出id,2.根據id通過 鍵查詢 找出title,3.排序->返回結果

情況二:1.ix_b索引查詢,2.排序->返回結果

具有包含性列的索引

在 sql server 2005 中,可以通過將非鍵列新增到非聚集索引的葉級別來擴充套件非聚集索引的功能。通過包含非鍵列,可以建立覆蓋更多查詢的非聚集索引。這是因為非鍵列具有下列優點 當查詢中的所有列都作為鍵列或非鍵列包含在索引中時,帶有包含性非鍵列的索引可以顯著提高查詢效能。這樣可以實現效能提公...

Mysql的列索引和多列索引(聯合索引)

建立乙個多列索引 create table test id int not null,last name char 30 not null,first name char 30 not null,primary key id index name last name,first name 建立多個索...

Mysql的列索引和多列索引(聯合索引)

建立乙個多列索引 create table test id int not null,last name char 30 not null,first name char 30 not null,primary key id index name last name,first name 建立多個索...