2009-09-18 74 views
1

我試圖加速在已經有一些索引的MySQL表中查詢SELECT。希望對同時(由其他客戶端)運行的頻繁INSERT INTO查詢沒有顯着影響。這些表擁有數百萬個條目,並且已經通過了技嘉的大小(他們有一個BLOB字段)。MySQL:哪個更好,單獨索引或相同索引?

這些表格有一對描述連續時間間隔的字段(可以是以微秒爲單位的時間間隔,也可以是一些執行或版本等)。這兩個字段被編入索引;我有兩個索引,一個只用於其中一個字段(當我查詢時),另一個用於兩個字段(這些字段也可以出現在許多查詢中)。

其他兩個候選索引來自標識符(例如,文件名),因爲它在查詢中也很常用。

一位同事建議我們在前兩個索引中加入標識符。不過,我有這樣的感覺,它有一個單獨鍵更有意義。我正在準備測試以確定哪個更好,但我預計這需要幾天。與此同時,我正在尋找過去的經驗和/或建議。

所以我的問題是:

  1. 這是理想,創建用於標識一個新的指數?或者將其納入區間索引?即,許多標識符可以具有相同的間隔,並且許多間隔可以具有相同的標識符。
  2. 這兩個選項中的哪一個應該消耗更多的磁盤空間,特別是在數百萬行的表中?我相信「更快」的一個,無論哪一個將是最耗費空間的。
  3. 我不知道是否創建新的索引(例如,單獨的索引選項)沒有解決任何問題,也沒有什麼幫助。在這種或類似的情況下你過去的經歷是什麼?任何建議/文件,我可以專門研究這個問題?

回答

2

確定爲表定義哪些索引取決於很多因素。其中最重要的之一就是你想要運行的查詢。

在這種情況下,如果不知道表結構以及您想要如何在工作中包含標識符的查詢,則很難說如何構建索引。

請記住,MySQL的每個查詢限制只有一個索引。這意味着查詢優化器一次只能爲任何給定的表使用一個索引(如果有的話)。

+0

Hi Avi。每索引一個索引的細節非常重要,我現在看到它是如何證明我的同事的論證。 AFAICT,你已經回答了我的問題。謝謝。 – jbatista 2009-09-18 12:07:13