2008-12-31 58 views
3

最近有幾個關於數據庫索引和聚集索引的問題,直到最近幾個星期,它對我來說都是新鮮事物。我想知道它的重要性以及創建它們會帶來怎樣的性能提升。索引和聚集索引對數據庫性能有多重要?

編輯:當你第一次出場時,在放入聚集索引時,通常需要注意什麼是最佳類型的字段?

回答

10

非常非常AGG重要。在我看來,明智的索引是數據庫性能優化中絕對最重要的事情。

這不是一個簡單的話題來涵蓋在一個單一的答案。良好的索引需要知道數據庫上將要發生的查詢,進行大量權衡並瞭解特定數據庫引擎中特定索引的含義。但是,它非常重要。

編輯:基本上,聚簇索引通常應該有很短的長度。應該在反映範圍的查詢中創建它們。他們不應該有重複的條目。但是這些指導方針非常籠統,決不是正確的。正確的做法是分析將要執行的查詢。仔細地對執行計劃進行基準測試和分析,並瞭解執行計劃的最佳方式。這需要多年的經驗和知識,決不能用單個段落來解釋。這是使數據庫專家的專家最重要的東西(並不是唯一的東西,但對其他重要的東西,比如併發問題,可用性......)是很原始的!

+0

這也不爲過,特別是對於有很多行的表格。它是表掃描和二進制排序之間的區別。對於一張20萬行的表格來說,最大值爲20萬,而不是19次。 – ctacke 2008-12-31 16:38:40

+0

ctacke:非常真實。我更新了「非常」的數量以反映您的評論! – 2008-12-31 16:47:34

1

如果沒有正確的索引,則強制RDBMS執行表掃描以查詢任何內容。非常低效。

我也推斷你沒有主鍵,這是關係設計中的一個主要罪過。

2

索引:非常重要。索引錯誤會使查詢變得更困難,有時甚至會導致無法在合理的時間內完成查詢。

索引也會影響插入性能和光盤使用(負面),因此在大型表上保留大量多餘的索引也是一個不好的主意。

聚類是值得思考的事情,我認爲它真的取決於特定數據庫的行爲。如果您可以正確地對數據進行羣集,則可以顯着減少滿足對不在內存中的行的請求所需的IOP數量。

1

當表格包含許多行時,索引是非常重要的。
有了幾個rws,沒有索引,性能會更好。
使用較大的表格索引對獲得良好性能非常重要。
定義它們並不容易。聚集意味着數據以聚簇索引順序存儲。
爲了獲得索引的良好提示,您可以使用蟾蜍

1

索引是極其重要

查詢的正確索引可以顯着提高性能,所以它看起來像巫術

1

正如其他答案所說,索引是至關重要的。

正如你可能從其他答案推斷,聚集索引是不太重要。

體面索引爲您提供一階性能增益 - 數量級是常見的。

集羣索引是一個二階或增量性能增益 - 通常會給性能提高的百分比很小(< 100%)。 (我們也會遇到'什麼是100%性能增益'的問題;我將這個百分比解釋爲((舊時間 - 新時間)/新時間)* 100,因此如果舊時間是10秒,並且新的時間是5秒,性能增加是100%。)

不同的DBMS對聚集索引意味着什麼有不同的解釋。謹防。 特別是,一些DBMS一次或多次對數據進行聚類,隨着時間的推移,聚類會逐漸衰減,直到數據被重新聚合爲止。我相信其他人對集羣更積極。

0

聚集索引是通用的,但並不總是您的主要關鍵。查看聚集索引的一種方法是根據聚集索引的值將數據物理排序。

這很可能不會在現實中卻refrencing聚集索引後容易讓你以下的績效獎金反正的情況:從一個聚集索引命中解決時

  1. 表中的所有列accessable免費就好像它們被包含在覆蓋索引中一樣。 (僅使用索引數據可解析查詢,而不必參考表本身的數據頁)

  2. 可以直接對聚簇索引進行更新操作,無需中間處理。如果你正在對錶進行大量更新,那麼你通常希望對集羣列進行重新設置。

  3. 根據實施情況的不同,可能存在順序訪問權益,其中存儲在磁盤上的數據通過更少的昂貴磁盤查找操作被更快地重新獲取。

  4. 根據具體實施情況,可能會有自由索引權益,其中物理索引不是必需的,因爲可以通過簡單的猜測遊戲算法解決數據訪問問題。

不要指望#3,特別是#4。 #1和#2在大多數RDBMS平臺上都是通用的安全投注。