2009-03-02 51 views
1

我想速度的MySQL查詢遵循以下MySQL中的快速頁面檢索,索引使用情況?

select 
my_field_A, 
my_field_B 
where 
time_id >= UNIX_TIMESTAMP('1901-01-01 00:00:00') AND 
time_id < UNIX_TIMESTAMP('2009-01-16 00:00:00') 

領域time_id是MySQL索引的,然而,查詢的行爲就好像整個數據庫在每個閱讀模式,基本上檢索數據的頁面查詢(檢索幾行已經很慢)。我不是MySQL的專家。有人能猜到我做錯了什麼嗎?

+0

「time_id應該是MySQL索引」,但你確定它是? '顯示來自[table]的索引' – jonstjohn 2009-03-02 16:49:58

回答

3

確保您有TIME_ID索引(B樹),這應該是高效的爲範圍查詢。還要確保time_id是適當的時間格式。

如果你真的想了解mysql在做什麼,你可以添加查詢關鍵字'explain'infront並在你的mysql客戶端運行它。這將顯示一些關於mysql正在做什麼以及執行哪種掃描的信息。

http://dev.mysql.com/doc/refman/5.0/en/using-explain.html

1

由於有很多time_id屬於這些標準,MySQL可能認爲全表掃描更好。

嘗試迫使指數:

SELECT 
my_field_A, 
my_field_B 
FROM mytable FORCE INDEX (index_name_on_time_id) 
WHERE 
time_id >= UNIX_TIMESTAMP('1901-01-01 00:00:00') AND 
time_id < UNIX_TIMESTAMP('2009-01-16 00:00:00') 
0

你需要較低的範圍內? 1901年之前是否有任何條目? 如何生成time_id列?如果TIME_ID總是更大,每個新的條目被添加到數據庫,你可能要考慮尋找最接近條目標識2009-01-16,然後通過ID

選擇
select my_field_A, my_field_B 
FROM 
    mytable 
WHERE 
    id <= ? 

如果不是的話,嘗試檢查MySQL 5.1中提供的分區並將其分解幾年,這應該會顯着提高速度。