2015-04-28 43 views
1

我遇到了一個問題,即使用我的查詢,執行時間大約需要14秒,而且我需要它更快。如何提高MySQL查詢執行時間

有反正我可以優化它嗎?

SELECT * 
FROM large_table 
WHERE (
INET_ATON('record number') 
BETWEEN INET_ATON(starting_number) 
AND INET_ATON(ending_number) 
) 
LIMIT 0 , 30 
+0

什麼是表結構?你的指數是什麼? – BK435

+1

[如何優化此IP到位置查找查詢?](http://stackoverflow.com/questions/7559929/how-to-optimize-this-ip-to-location-lookup-query) – Alex

+0

謝謝您亞歷克斯,讓我深入瞭解這一點,因爲我目前在我的列表中有超過300萬個IP記錄。謝謝 –

回答

5

即使用作標準/過濾器的柱被索引它仍然會導致因爲INET_ATON()函數的表的完整掃描。嘗試這個。

SELECT INET_ATON(`record number`) 
    FROM large_table 
    WHERE 
    'record number' 
    BETWEEN starting_number 
    AND ending_number 
    LIMIT 0 , 30 
1

謝謝你們!我已經完成了對Alex鏈接的研究,這是一個很好的解決方案,但是我不能將整數添加到我所有的400萬個IP地址記錄中,因爲這非常耗時。 我已經解決了我的具體問題http://php.net/explode,我只是爆炸IP地址,然後刪除最後一個數字,並搜索基於varchar的列,我的查詢得到的結果不到一秒鐘。我目前正在使用此解決方案。謝謝所有