mysql 两个大数据量表连接更新数据问题

hellman1984 2012-11-29 11:02:36
问题描述:
表A有三个字段
ip_number city province

表B有四个字段
begin_ip end_ip city province

表B是ip地址库,包括一个ip端的开始、结束、对应的城市和省份。目前有23万条数据。
表A是需要更新的目标表,根据ip_number关联B表,更新city,province字段。

目前小弟的解决方案是使用join 进行表连接,条件是 A.ip_number >= B.begin_ip and A.ip_number <= B.end_ip;

但是此解决方案在数据量小的时候还是可以的,当A表的数据量大的时候,基本就执行不了了。

请问大家有什么好的优化方案或者解决方案么。
在线等,谢谢
...全文
633 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
WWWWA 2012-11-29
  • 打赏
  • 举报
回复
SELECT * FROM tt a INNER JOIN tt b ON a.ip_number=b.ip_number WHERE a.ip_number>=b.begin_ip AND b.ip_number<=b.end_ip;
rucypli 2012-11-29
  • 打赏
  • 举报
回复
首先你这种更新ip库的需求不会很多 因为ip大多不会变动太频繁 另外你更新始终是更新了A表全表 这完全没必要 只要更新city province不同的即可 update A,B set A.city=B.city,A.province=B.province where A.ip_number >= B.begin_ip and A.ip_number <= B.end_ip and A.city<>B.city and A.province<>B.province
hellman1984 2012-11-29
  • 打赏
  • 举报
回复
建了,还是数据少的时候可以,数据多的时候也不好用。
WWWWA 2012-11-29
  • 打赏
  • 举报
回复
在begin_ip、end_ip上建立索引试试
ACMAIN_CHM 2012-11-29
  • 打赏
  • 举报
回复
A.ip_number 上创建索引
WWWWA 2012-11-29
  • 打赏
  • 举报
回复
的确,对于BETWEEN AND 这种条件,索引也没有多大作用
hellman1984 2012-11-29
  • 打赏
  • 举报
回复
我自己分析主要的问题应该出在那个范围上面,一条条的比较,这个有点恐怖的。即使使用存储过程这两个循也没有改善多少啊

56,677

社区成员

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

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