SQL Server 2008 非聚集索引設計
非聚集索引包含索引鍵值和指向表資料儲存位置的行定位器。有關非聚集索引體系結構的詳細資訊,請參閱非聚集索引結構。
可以對錶或索引檢視建立多個非聚集索引。通常,設計非聚集索引是為改善經常使用的、沒有建立聚集索引的查詢的效能。
與使用書中索引的方式相似,查詢優化器在搜尋資料值時,先搜尋非聚集索引以找到資料值在表中的位置,然後直接從該位置檢索資料。這使非聚集索引成為完全匹配查詢的最佳選擇,因為索引包含說明查詢所搜尋的資料值在表中的精確位置的項。例如,為了從 HumanResources.Employee 表中查詢向特定經理負責的所有僱員,查詢優化器可能使用非聚集索引 IX_Employee_ManagerID;它以 ManagerID 作為其鍵列。查詢優化器能快速找出索引中與指定 ManagerID 匹配的所有項。每個索引項都指向表或聚集索引中準確的頁和行,其中可以找到相應的資料。在查詢優化器在索引中找到所有項之後,它可以直接轉到準確的頁和行進行資料檢索。
資料庫注意事項
設計非聚集索引時需要注意資料庫的特徵。
更新要求較低但包含大量資料的資料庫或表可以從許多非聚集索引中獲益從而改善查詢效能。與全表非聚集索引相比,考慮為定義完善的資料子集建立篩選索引可以提高查詢效能、降低索引儲存開銷並減少索引維護開銷。
決策支援系統應用程式和主要包含只讀資料的資料庫可以從許多非聚集索引中獲益。查詢優化器具有更多可供選擇的索引用來確定最快的訪問方法,並且資料庫的低更新特徵意味著索引維護不會降低效能。
聯機事務處理應用程式和包含大量更新表的資料庫應避免使用過多的索引。此外,索引應該是窄的,即列越少越好。
對錶編制大量索引會影響 INSERT、UPDATE、DELETE 和 MERGE 語句的效能,因為當表中的資料更改時,所有索引都須進行適當的調整。
查詢注意事項
在建立非聚集索引之前,應先了解訪問資料的方式。考慮對具有以下屬性的查詢使用非聚集索引:
使用 JOIN 或 GROUP BY 子句。
應為聯接和分組操作中所涉及的列建立多個非聚集索引,為任何外來鍵列建立一個聚集索引。
不返回大型結果集的查詢。
建立篩選索引以覆蓋從大型表中返回定義完善的行子集的查詢。
包含經常包含在查詢的搜尋條件(例如返回完全匹配的 WHERE 子句)中的列。
列注意事項
考慮具有以下一個或多個屬性的列:
覆蓋查詢。
當索引包含查詢中的所有列時,效能可以提升。查詢優化器可以找到索引內的所有列值;不會訪問表或聚集索引資料,這樣就減少了磁碟 I/O 操作。使用具有包含列的索引來新增覆蓋列,而不是建立寬索引鍵。有關詳細資訊,請參閱具有包含列的索引。
如果表有聚集索引,則該聚集索引中定義的列將自動追加到表上每個非聚集索引的末端。這可以生成覆蓋查詢,而不用在非聚集索引定義中指定聚集索引列。例如,如果一個表在 C 列上有聚集索引,則 B 和 A 列的非聚集索引將具有其自己的鍵值列 B、A 和 C。
大量非重複值,如姓氏和名字的組合(前提是聚集索引被用於其他列)。
如果只有很少的非重複值,例如僅有 1 和 0,則大多數查詢將不使用索引,因為此時表掃描通常更有效。對於這種型別的資料,應考慮對僅出現在少數行中的非重複值建立篩選索引。例如,如果大部分值都是 0,則查詢優化器可以對包含 1 的資料行使用篩選查詢。
索引選項
在建立非聚集索引時,可以指定若干索引選項。要尤其注意以下選項:
FILLFACTOR
ONLINE
有關詳細資訊,請參閱設定索引選項。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-515886/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL Server 2008 建立非聚集索引SQLServer索引
- SQL Server索引 - 非聚集索引SQLServer索引
- SQL Server 聚集索引和非聚集索引的區別SQLServer索引
- [zt] 聚集索引和非聚集索引(sql server索引結構及其使用)索引SQLServer
- SQL Server 深入解析索引儲存(非聚集索引)SQLServer索引
- SQL Server 索引和表體系結構(非聚集索引)SQLServer索引
- SQL Server 深入解析索引儲存(聚集索引)SQLServer索引
- [轉]聚集索引和非聚集索引的區別索引
- 使用聚集索引和非聚集索引的區別索引
- SQL Server 索引和表體系結構(聚集索引)SQLServer索引
- SQL Server 2008篩選索引設計準則SQLServer索引
- mysql關於聚集索引、非聚集索引的總結MySql索引
- Sql Server之旅——第四站 你必須知道的非聚集索引掃描SQLServer索引
- 【SQL Server2005頁面儲存5之--非聚集索引行在非葉級別儲存】SQLServer索引
- SQLSERVER的非聚集索引結構SQLServer索引
- 一文總結分析聚集索引、非聚集索引、覆蓋索引的工作原理!索引
- 從InnoDB 索引執行簡述 聚集索引和非聚集索引、覆蓋索引、回表、索引下推索引
- 資料庫的聚集索引和非聚集索引 很好的詳細說明資料庫索引
- 從效能的角度談SQL Server聚集索引鍵的選擇SQLServer索引
- SQL Server調優實戰 亂建聚集索引的後果SQLServer索引
- 【SQL Server2005頁面儲存4之--非聚集索引行在葉級別儲存】SQLServer索引
- 探究SQL新增非聚集索引,效能提高几十倍之謎SQL索引
- SQL Server 2008配置並行索引操作SQLServer並行索引
- Sql Server之旅——第三站 解惑那些背了多年聚集索引的人SQLServer索引
- 關於SQL Server 2008的缺失索引功能SQLServer索引
- Sql Server系列:索引設計原則及優化SQLServer索引優化
- SQL Server 2008證書和非對稱金鑰SQLServer
- SQL Server 列儲存索引 第二篇:設計SQLServer索引
- 理解SQL Server 2008索引的儲存結構YDSQLServer索引
- SQL Server 2008為索引操作選擇恢復模式SQLServer索引模式
- 軟體開發人員真的瞭解SQL索引嗎(聚集索引)SQL索引
- 建立SQL Server 2008的計劃指南SQLServer
- 淺析SQL Server 2008綜合資料可程式設計性SQLServer程式設計
- SQL Server 索引結構SQLServer索引
- 最佳SQL Server索引策略SQLServer索引
- FAQ系列|MySQL索引之聚集索引MySql索引
- SQL Server 2008中Analysis Services的新特性——深入SQL Server 2008SQLServer
- SQL Server 2008 表和索引的行壓縮和頁壓縮SQLServer索引