索引設計基本概念

設計不良的索引與不足的索引是資料庫應用程式瓶頸的主要原因。設計有效的索引是達到良好資料庫和應用程式效能最重要的一點。為資料庫選擇正確的索引及工作負載時,往往很難在查詢速度與更新成本之間取得平衡。範圍較小的索引,或是索引的索引鍵中包含較少的資料行,所需的磁碟空間與維護負擔相對較小。相反的,如果索引範圍較大,能涵蓋的查詢就更多。在找到最有效率的索引之前,可能需要先試過數種不同的設計。索引可以新增、修改和卸除,不會影響資料庫結構描述或應用程式的設計。所以,不要吝於嘗試各種不同的索引。

SQL Server 中的查詢最佳化工具可以確實地選擇在大多數情況中最有效率的索引。整體的索引設計策略應該為查詢最佳化工具提供多樣化的索引,然後信任它會做最恰當的決定。這可降低分析時間,且會在各種不同狀況下得到相當好的效能。若要查看查詢最佳化工具用於特定查詢的索引,請在 SQL Server Management Studio 的 [查詢] 功能表中,選取 [包括實際執行計畫]。如需詳細資訊,請參閱<如何:顯示實際執行計畫>。

使用索引不一定就會有良好的效能,良好的效能和有效率地使用索引也不能劃上等號。如果使用索引對產生最佳效能一定有幫助,查詢最佳化工具的作業就很單純。但事實上,選擇不正確的索引可能得不到最佳效能。因此,查詢最佳化工具的工作是只有在提升效能時才選擇索引或索引組合,如果會妨礙效能,就要避免索引式擷取。

索引設計工作

下列工作是針對設計索引所建議的策略:

  1. 瞭解資料庫本身的特性。例如,這是經常修改資料的線上交易處理 (OLTP) 資料庫嗎?或是包含主要唯讀資料的決策支援系統 (DSS) 或資料倉儲 (OLAP) 資料庫?如需詳細資訊,請參閱<線上交易處理與決策支援的比較>。

  2. 瞭解最常使用的查詢特性。例如,知道最常使用的查詢會聯結兩個以上的資料表,將有助於判斷要使用的最佳類型索引。如需詳細資訊,請參閱<一般索引設計指導方針>。

  3. 瞭解用於查詢的資料行特性。例如,對於具有整數資料類型的資料行且也是唯一或非 Null 的資料行來說,索引是最理想的方式。已篩選的索引適用於具有定義完善之資料子集的資料行。如需詳細資訊,請參閱<篩選索引設計指導方針>。

  4. 建立或維護索引時,決定可能會提升效能的索引選項。例如,ONLINE 索引選項對於在現有的大型資料表上建立叢集索引就有幫助。ONLINE 選項會在建立或重建索引的同時,允許繼續進行基礎資料上的並行活動。如需詳細資訊,請參閱<設定索引選項>。

  5. 決定最理想的索引儲存位置。非叢集索引可以作為基礎資料表儲存在相同的檔案群組中,或儲存在不同的檔案群組中。藉由增加磁碟 I/O 效能,索引的儲存位置可提升查詢效能。例如,將非叢集索引儲存在不同磁碟機上 (與資料表檔案群組不同的磁碟機) 的檔案群組中,可以同時讀取多部磁碟機,所以可提升效能。如需詳細資訊,請參閱<在檔案群組中放置索引>。

    此外,叢集和非叢集索引可跨多個檔案群組使用資料分割結構描述。透過讓您快速及有效地存取或管理資料子集,分割可在維護整體集合的完整性時,讓大型資料表或索引更容易管理。如需詳細資訊,請參閱<資料分割資料表與索引>。當您考慮使用分割時,請決定是否應該校準索引,也就是說,使用分割資料表相同的方法進行分割,或獨立進行分割。如需詳細資訊,請參閱<資料分割索引的特殊指導方針>。

如需有關這些工作的詳細資訊,請參閱<一般索引設計指導方針>。