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

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;
存在的的问题:
在小规模的测试情况下,更新耗时还能接受,但上万级就不行了,现在求助有什么更优化的 算法/思路 。。。
...全文
499 点赞 收藏 2
写回复
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 试过,依然很慢很慢
回复 点赞
发动态
发帖子
MySQL
创建于2007-09-28

2.4w+

社区成员

5.5w+

社区内容

MySQL相关内容讨论专区
社区公告
暂无公告