我有一個需要很長時間來處理的mySQL查詢。我正在查詢與國家/地區代碼相關的IP範圍大表,以查找url_click表中每個IP的原始國家/地區。 (來自hxxp://ip-to-country.webhosting.info/的IP數據庫)我的mySQL查詢效率如何?
雖然速度很慢,但它的效果非常出色。
有沒有更有效的方法來寫這個查詢?
表和輸出JPG:http://tiny.cx/a4e00d
SELECT ip_addr AS IP, geo_ip.ctry, count(ip_addr) as count
FROM `admin_adfly`.`url_click`,admin_adfly.geo_ip
WHERE INET_ATON (ip_addr)
BETWEEN geo_ip.ipfrom AND geo_ip.ipto
AND url_id = 165
GROUP BY ip_addr;
我可以推薦http://codereview.stackexchange.com這種事情嗎? –
我懷疑過濾INET_ATON()列上的結果意味着它必須掃描應用INET_ATON()到'url_id = 165'的所有內容 - 你能否預先寫入'INET_ATON()'你的以某種方式解決問題,作爲專欄?另外,你有一個關於url_id的索引嗎?另外,如果你要求MySQL'查詢'查詢,你會得到什麼? – marnir
謝謝大家。我試過Quassnoi建議創建一個索引,但由於某種原因,我無法創建一個b-tree存儲類型。然後我嘗試了喬納森·萊弗勒的建議,這確實爲查詢減少了幾秒鐘,但它仍然需要很長時間。我決定在初始記錄輸入點而不是後期查詢中查詢與IP相關的國家。 – Damo