求助高手:区间命中后更新的优化算法

jxsrleoyan 2018-04-01 07:44:51
现有:
一张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;
存在的的问题:
在小规模的测试情况下,更新耗时还能接受,但上万级就不行了,现在求助有什么更优化的 算法/思路 。。。
...全文
537 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
飞啊子 2018-04-13
  • 打赏
  • 举报
回复
你给的sql语句 写了2个ip_min_index ,其中一个应该是ip_max_index。 你access 表有多少数据?你在更新时间不加时间条件吗? 比如每次只更新近48小时内的? 你用left join 试试。
jxsrleoyan 2018-04-13
  • 打赏
  • 举报
回复
引用 1 楼 feiazifeiazi 的回复:
你给的sql语句 写了2个ip_min_index ,其中一个应该是ip_max_index。 你access 表有多少数据?你在更新时间不加时间条件吗? 比如每次只更新近48小时内的? 你用left join 试试。
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 试过,依然很慢很慢

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧