2009-12-29 58 views

回答

5

我有一個索引覆蓋兩個字段的MySQL表。如果在表格中插入新行,我的索引是否仍然有效?

是的,每次執行該表的插入/更新/刪除時索引都會更新。

3

是的。你能解釋一下爲什麼你認爲它不可能嗎?

請注意,如果您在其中一個或兩個字段上都有單獨的索引,那麼mysql(至少有一些我使用過的5.0版本)默認情況下不會使用組合索引;如果有疑問,請使用EXPLAIN來驗證您的索引是否按照您的預期使用。

+0

只是以前沒有使用過它們。我想他們會,但我想確定。 – Brian 2009-12-29 23:00:08

8

是的,索引自動更新;因此索引(aka索引)使插入,更新和刪除速度更慢。

+0

但是關於索引(或索引)的關鍵點是它們通常會使選擇操作更快。如果索引沒有更快地查詢某個查詢,那麼最好是強制執行某種特定的約束 - 否則它就會出現問題,應該刪除。 – 2009-12-29 23:42:08

5

是的,它仍然有效。如果您在插入新數據後無法使用索引,索引將毫無用處。請注意,添加到表中的數據越多,索引越大,因此您希望確保正確創建它們並將其限制爲您所需的數據。

3

正如其他人所說,指數是隨每個插入更新。這是插入和更新的性能損失的一部分。

其實這並不像一些回答者所暗示的那樣古怪。在20世紀80年代,我設計了一個使用RDBMS的系統,該系統推遲更新「性能」(根據文檔)。具有諷刺意味的是,它被命名爲RDM,最初是爲實時數據管理器(或與之非常接近的東西),但後來被倒退回響應數據管理器

RDM似乎用於人類速度更新,所以推遲數據庫寫入,直到完成了幾行爲止,這可能是可以接受的。我設計的系統使用連接到自動數據源的數據庫服務器封裝的數據庫後端。 AFAIK,這是RDM期待快速行插入的第一個應用。其中一個問題解決方案是設計一個時間戳字段,以便系統中的所有節點都可以說「使用yyyy-mm-dd hh:mm:ss更新所有內容」。原來,這是一種最糟糕的索引更新/刷新方案,並且可以進行診斷。一旦無記錄的電話意味着相信我,我真的想要數據刷新和索引更新現在被添加,它工作得很好。

+0

有用的例子是我記得通過傳聞知道在某些系統上是一個問題。 – 2009-12-29 23:43:42