2013-07-25 48 views
0

我今天被問了一個問題,我不想在表上創建一個SQL索引。什麼時候不適合使用SQL索引

我能想到的唯一事情就是當你不需要一個(即一個小桌子)時。這個答案不對。有什麼時候我應該使用索引,什麼時候不應該?

+0

您的意思是「不想在此字段或此表上包含索引」,或者「在給定查詢中不要使用此特定索引」? – Sethcran

+0

我更新了我的問題 – webdad3

回答

1

你可以用conter問題回答它:你什麼時候需要索引?

如果您想搜索條目,以便更快地獲得結果,則需要索引。例如,如果該列在where子句中使用。當然,你可以嘗試索引一切,但索引會導致你使用額外的內存/硬盤。因此,您只需索引用於查找行的列。

MySQL試圖找到您的行時正在讀取的行是MySQL,您可以使用EXPLAIN command進行分析。

這有幫助嗎?

1

一個經驗法則是,在小表上(小於大約100'000行)放置除主鍵唯一索引以外的所有索引。

此外,如果該列不用於搜索目的(例如員工的工資),則不適合使用索引。

4

當不在表格上創建索引時,有很多事情需要考慮。

首先,有很多可能的索引可以創建。例如,您可以創建一個索引,不僅包含表中的每一列,而且包含列的每個排列(因爲索引中的列排序很重要)。隨着列數的增加,這可能是大量的索引。

每個索引都帶有一些以不同方式降低性能的事情。例如,它們可能會佔用內存/磁盤空間。可能比這更糟糕的是,索引需要更新,當它下面的表更新。這意味着每個表中的插入/更新/刪除都可以觸發索引更新。由於你有更多的索引,那就是更新的索引,這可能會導致CUD操作性能下降,並且如果你經常這樣做,可能會導致服務器性能下降。

由於此性能影響,您希望避免「無用」索引。用於每個查詢的索引通常都很好,但每天只用於一次查詢的索引可能沒有用處。在試圖確定哪些索引足夠有用以及哪些索引的性能優勢高於性能匹配時,這都是一種折衷。

+0

+1,提及CUD操作 –

相關問題