我有兩個表:A - 301列(第一個名爲a1 int(11)主鍵,第二個到第301個 - 雙(15,11))& B - 33列(第一個 - b1 int(11)唯一鍵,第二個 - b2 varchar(100)主鍵,...,33rd - b33 int(11)MUL)。Mysql select on indexded column slowdown on large tables
A & B有~13,500,000條記錄。
我的MySQL查詢:對於POS的每一個值,在設定的POS(1,1000,2000,...,1350),1000的倍數:
選擇A. *,B2,B5 ,b7,b8,b10,b13,b33來自a1 = b1上的A join B,其中b33> = pos和b33 < pos + 1000;
對於b33 < = 600,000的值,查詢需要1-5秒。之後,查詢開始花費20-30秒。當b33> = 8,000,000時,查詢開始以60-70s開始。我不明白爲什麼發生放緩。 b33被編入索引,並且連接發生在一個表中被定義爲主鍵且在另一個表中唯一的鍵上。有沒有解決方法?這實際上阻礙了代碼的速度,如果沒有其他作用,我將不得不將表A & B分成幾個較小的表。我真的希望我不必這樣做!請幫忙!
編輯:這裏是的O/P說明 -
** * ** * ** * ** * * 1行* ** * ** * ** * ** *
ID:1個
SELECT_TYPE:SIMPLE
表:乙
類型:範圍
possible_keys:B1,B33
鍵:B33
key_len:4
REF:NULL
行:981
額外:使用其中
* ** * ** * ** * ** * 2。行* ** * ** * ** * ** *
ID:1個
SELECT_TYPE:SIMPLE
表:一個
類型:eq_ref
possible_keys: PRIMARY
key:PRIMARY
key_len:4
ref:DBName.B.b1
行:1
附加:
2行中集(0.00秒)
那麼你有一個特定的價值> 600,000的性能突然從5秒降到20秒? – 2011-06-06 06:42:54
不,我更喜歡一個範圍。發佈650,000這是一場噩夢。 – ayesha129 2011-06-07 09:02:07
我想這是解釋慢速輸出的輸出。而快速的?有相同的輸出嗎? – Samuel 2011-06-07 12:27:24