眾所周知,明智地使用索引可以幫助 SELECT 査詢更快地執行。這可能會令一些資料庫管理員(DBA)嘗試透過向査詢中可能包含的每一欄加入索引來盡可能多地提高效能。在資料表中加入索引的缺點是它們會影響寫入的效能。此外,不正確建立的索引甚至會對 SELECT 査詢產生不利影響!由於索引過多、不正確或缺失而影響效能的任何資料表配置都被視為效果不佳的索引。在今天的文章中,我們將了解效果不佳的索引的後果,以及如何選擇叢集索引包含哪些欄。
效果不佳的索引的影響
效果不佳的索引可能是於一欄上建立的索引無法提供更簡單的資料作業,也可能是於多欄上建立的索引不但不能加快査詢速度,反而會降低査詢速度。
如果未正確建立索引,資料庫必須遍歷更多記錄才能擷取査詢請求的資料。因此,它會使用更多的硬體資源(處理器、記憶體、磁碟和網路),並使擷取資料的時間變得更長。
在某些情况下,無叢集索引的資料表也可能被視為較差的索引做法。在大多數情况下,在堆積資料表(即無聚集索引的資料表)上執行 SELECT 陳述式、插入、更新和刪除記錄都比有聚集索引的資料表慢。
為叢集索引選擇欄
在關聯式資料庫中建立具有主索引鍵(PK)的資料表時,將在主索引鍵欄上自動建立唯一的叢集索引。雖然這種預設操作在大多數情况下是完全可以接受的,但這可能不是資料的最佳索引。
組成叢集索引的欄應形成唯一、識別、主索引鍵或任何組合,使其中每個新項目的值都會增加。由於叢集索引根據值排序記錄,因此使用以遞增順序排序的欄(如識別欄位)是一個不錯的選擇。
值經常變更的欄不應用於叢集索引。原因是用於叢集索引的欄的每次變更都需要重新排序記錄。透過使用更新頻率較低或理想情况下根本不更新的欄,可以輕鬆避免這種重新排序。
同樣,儲存大型資料的欄,例如 BLOB 欄(text、nvarchar(max)、image 等)和 GUID 欄對於叢集索引來說也不是理想的。這是因為排序大數值的效率很低,而且對於 GUID 和 image 欄,排序沒有多大意義。
最後,叢集索引不應建立於已在唯一索引中使用的欄上。
總結
在今天的文章中,我們了解了效果不佳的索引的後果,以及如何選擇將哪些欄作為叢集索引的一部分。在下一篇文章中,我們將介紹為某些作業提供更好效能的索引如何增加其他作業的負擔。
Rob Gravelle 居住於加拿大渥太華,是一名有 20 多年經驗的 IT 專家。過住,Rob 曾為情報相關的組織(如加拿大邊境服務局和各種商業組織)建置系統。在業餘時間,Rob 是一名出色的吉他演奏家,並擁有多張 CD和數位發行。