我遇到了一個問題,即使用我的查詢,執行時間大約需要14秒,而且我需要它更快。如何提高MySQL查詢執行時間
有反正我可以優化它嗎?
SELECT *
FROM large_table
WHERE (
INET_ATON('record number')
BETWEEN INET_ATON(starting_number)
AND INET_ATON(ending_number)
)
LIMIT 0 , 30
我遇到了一個問題,即使用我的查詢,執行時間大約需要14秒,而且我需要它更快。如何提高MySQL查詢執行時間
有反正我可以優化它嗎?
SELECT *
FROM large_table
WHERE (
INET_ATON('record number')
BETWEEN INET_ATON(starting_number)
AND INET_ATON(ending_number)
)
LIMIT 0 , 30
即使用作標準/過濾器的柱被索引它仍然會導致因爲INET_ATON()函數的表的完整掃描。嘗試這個。
SELECT INET_ATON(`record number`)
FROM large_table
WHERE
'record number'
BETWEEN starting_number
AND ending_number
LIMIT 0 , 30
謝謝你們!我已經完成了對Alex鏈接的研究,這是一個很好的解決方案,但是我不能將整數添加到我所有的400萬個IP地址記錄中,因爲這非常耗時。 我已經解決了我的具體問題http://php.net/explode,我只是爆炸IP地址,然後刪除最後一個數字,並搜索基於varchar的列,我的查詢得到的結果不到一秒鐘。我目前正在使用此解決方案。謝謝所有
什麼是表結構?你的指數是什麼? – BK435
[如何優化此IP到位置查找查詢?](http://stackoverflow.com/questions/7559929/how-to-optimize-this-ip-to-location-lookup-query) – Alex
謝謝您亞歷克斯,讓我深入瞭解這一點,因爲我目前在我的列表中有超過300萬個IP記錄。謝謝 –