2010-08-05 177 views

回答

14

這實際上是同一種類的問題:

爲什麼要花更多的時間來把我所有的雜貨在正確的位置在我的廚房 比後,我訪問了我的雜貨袋把一切商店?

這是因爲當你存放你的雜貨時,你希望他們在一個很好的,衆所周知的位置,以便後來更容易找到它們。

一個數據庫也必須這樣做。

  • 如果您有一個沒有索引的表,它可以在表的末尾添加新數據。
  • 如果您有索引,數據庫必須執行更多工作。它可能仍然會將記錄放在表格的最後,但是它還會更新其索引,以確保如果您希望以後找到該記錄,它會比沒有索引時更快地找到它。

這也意味着添加更多索引會進一步減慢插入。

應該很清楚,如果您以後也會使用它,您只想創建一個索引。如果您只創建一個索引,並且以後不使用它來提高查詢的性能,則不需要索引,因爲它只會減慢插入速度,並且不會改進任何查詢。

+1

我喜歡類比;-) 。 – 2010-08-05 14:23:45

+0

爲了讓這個比喻在學習上更加正確,我會說這就像是買了兩件雜貨品;一件物品以舊的順序進入食品室,重複的物品按照字母順序放在廚房的長凳上。當然,除非你使用索引組織的表格,在這種情況下,你不需要爲食品儲藏室獲取物品:) – 2012-06-05 07:05:08

9

INSERT語句必須將數據添加到表數據塊並更新表定義的任何索引。

很明顯,如果你有一個索引,插入需要做更多的工作來更新索引。

1

索引允許您存儲更多關於幫助檢索數據的數據的更多信息(索引塊)。很顯然,你最初正在做額外的工作,以後才能受益(對於選擇)。

0

如果您需要從插入的表中稍後階段刪除一些數據,那麼在表上使用索引不是一個好主意。將數據插入表中所需的額外時間可通過索引表上運行得更快的刪除來進行補償(如果在刪除WHERE子句中使用了索引列)

+0

這並不回答所問的問題。另外,反對使用索引的通用建議(特別是沒有特定的上下文)是不好的建議。 – 2012-09-21 20:53:52