現有:
一張IP字典表,約45W個區間段,表結構為 ip ( ip_min_index, ip_max_index, description )
一張IP訪問表,每天約1.5W個IP訪問,表結構為 access ( ip_index, description)
需求:
根據 access.ip_index 所在的 ip.ip_min_index, ip.ip_max_index 區間,將 ip.description 的值更新到 access.description
目前的SQL:
update access a
set a.description = (
select description from ip b where b.ip_min_index <= a.ip_index and a.ip_index <= b.ip_min_index
)
where a.description is null;
存在的的問題:
在小規模的測驗情況下,更新耗時還能接受,但上萬級就不行了,現在求助有什么更優化的 演算法/思路 。。。
uj5u.com熱心網友回復:
你給的sql陳述句 寫了2個ip_min_index ,其中一個應該是ip_max_index。你access 表有多少資料?你在更新時間不加時間條件嗎? 比如每次只更新近48小時內的?
你用left join 試試。
uj5u.com熱心網友回復:
1、a.ip_index <= b.ip_min_index 這個是的確是我打錯了,
2、access ( ip_index, description) 入庫時中只有IP,所有不判斷時間,只判斷a.description is null 就可以了
3、access 表約1.5W
4、left join 試過,依然很慢很慢
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/92427.html
標籤:MySQL
上一篇:MySQL 新增欄位并賦值
下一篇:sql陳述句優化問題,求助
