[sql server] 複合式索引的一些tips

來源:互聯網
上載者:User

複合式索引的一些tips

1,定義

索引基於一列或多列,指定兩個或多個列名,可為指定列的組合值建立複合式索引。一般情況下,複合式索引也是覆蓋索引(covering index)。一般而言,複合式索引(覆蓋索引除外)應該盡量避免,因為複合式索引會佔用更多的空間,讀取的時候需要更多的IO和CPU時間,進而影響效能。

要使用複合式索引的主要目的是增強索引的選擇性,而增強選擇性,最終還是要落到資料庫設計上,而不是通過建立複合式索引來實現。

如果確實需要建立複合式索引,應該儘可能的讓索引變得輕量,因為這將會減少索引的大小,進而減少IO讀寫,提高效能。

2。何時使用

複合式索引通常僅在查詢語句中的WHERE條件使用了複合式索引最左邊的列時會最有用。例如對city,state建立了組
合索引,如果查詢語句的where條件為WHERE CITY=‘xiamen',將會使用到該複合式索引,但WHERE STATE='China'將不會使用到該索引。

但即使是WHERE條件沒有指定複合式索引的第一列,但如果該複合式索引包含了查詢語句中所涉及到的列,查詢最佳化
器也會使用該複合式索引,因為這是一個覆蓋索引(covering index)

3。列的順序
當建立了一個複合式索引時,列的順序是非常關鍵的,盡量讓高選擇性的列放在複合式索引的最左端。如果把低選
擇性的列放在最左端,可能會造成無法使用該索引的情況。所謂的高選擇性,一般指不重複值達到95%

4。複合式索引和單列索引

有時候,將複合式索引劃分為單列索引是個很好的方法,因為對於複合式索引而言,只有第一列具備統計資訊,因
此,如果該列的選擇性不高,查詢最佳化工具就不會使用到該索引。如果劃分為單列索引時,每列上都有統計信
息,查詢最佳化工具會有更多的選擇,產生更好的執行計畫。

但這並不意味著多個單列索引總比複合式索引好,需要通過測試,才能得出結果。

5.    需要注意的情況

上面幾點提到了複合式索引的第一列需要使用高選擇性的。但在建立多列主鍵或唯一約束時,系統會預設對建立
約束的列建立索引,這個時候的複合式索引的選擇性可能並不是很好,需要手工修改,把高選擇性的列放在第一
位。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.