2008-10-16 42 views
2

目前我們有一個表格用於跟蹤inivitations。我們有一個已編入索引的電子郵件字段,但我們也有三個可選密鑰,用戶可以在添加新記錄電子郵件時指定這些密鑰。我們不允許重複,因此我們必須查詢電子郵件加可選鍵是否已存在。目前,只有在指定了密鑰的情況下才會將密鑰添加到選擇語句中。正常情況下,只有電子郵件是指定的,並使用它的工作相當迅速的指數。當鍵被添加時性能下降。單個索引與多個字段索引

添加三個索引是否會影響其他操作的性能?密鑰可能很少使用,我們不希望影響這種情況下的性能。

  • 電子郵件,key1的
  • 電子郵件,KEY1,KEY2
  • 電子郵件,KEY1,KEY2,KEY3

另一個想法是添加1個鍵。

  • 電子郵件,KEY1,KEY2,KEY3

然後一直使用在查找所有的3個按鍵(如鍵1 =的myKey和鍵2 IS NULL和KEY3是NULL)

另請參見

Exact duplicate post

+0

[Multiple Indexes vs Multi-Column Indexes]的可能重複(http://stackoverflow.com/questions/179085/multiple-indexes-vs-multi-column-indexes) – 2012-06-12 00:19:16

回答

3

就我個人而言,我會推薦這種方法。

嘗試使用涵蓋所有內容的單個索引的方法,如果我正確記得它將仍然執行良好,如果您只查詢第一個包含的列。索引就緒後,運行索引顧問。

然後嘗試其他路線並重復。

這實際上取決於您的數據。

我通常能夠通過1覆蓋索引,從最常用的鍵開始。

+0

這正是我所要做的。 – 2008-10-16 18:28:41

2

這取決於表的更新頻率,以及如何索引是複雜的。如果你堅持創建索引,那麼每次插入/更新/刪除記錄時,都必須修改每個索引以反映該信息。

如果你只放了三個索引,而且它們比較簡單,那麼你應該沒有問題。

0

我可能是錯的,但我相信,如果你添加:

  • 電子郵件,KEY1,KEY2,KEY3

爲指標,如果您的查詢使用大多數數據庫將使用它「email」,「email/key1」,「email/key1/key2」等等,而不需要爲缺少的字段指定Null值。

0

正如其他人所說的,當搜索a,a和b或a,b和c時,大多數數據庫將使用索引「a,b,c」。而且他們通常每個表只使用一個索引。因此,添加「電子郵件,密鑰1,密鑰2,密鑰3」可能是最好的。

這就是說,使用EXPLAIN來查明真正發生了什麼。請檢查以確定您的查詢正在使用哪些索引(如果有)。每個數據庫都有它的怪癖。