插入关联表数据的优化方法(转)

 在应用开发的时候经常会使用到一对多、多对多之类的关联表,在插入数据比较多的时候可以考虑优化的方法。

举个简单的例子,有个用户表User和用户组表Group,两者之间通过关联表GroupUser关联多对多关系。
假设要在Group表中的id为2的组添加多个用户,id分别为2,3,4,5 通常在写入关联表的时候会使用下面的方法
SQL 查询:INSERT INTO groupUser VALUES ( 2, 2 )
插入的行数: 1 (查询花费 0.0435 秒)多次写入的时间自然就要成倍增加
 
现在考虑使用 insert select 方式写入关联表数据,提高速度。 
[separator]
SQL 查询:INSERT INTO groupUser
SELECT a.id, b.id
FROM group a, User b
WHERE a.id =2 AND (b.id =2 OR b.id =3 OR b.id =4 OR b.id =5)插入的行数: 4 (查询花费 0.0540 秒)
显然在整体效率上提高不少。
再对SQL指令作下优化,可以改为
SQL 查询:INSERT INTO groupUser
SELECT a.id, b.id
FROM group a, User b
WHERE a.id =2 AND b.id IN ( 2, 3, 4, 5 )
插入的行数: 4 (查询花费 0.0344 秒)
使用in方法还有一个好处就是在生成SQL语句的时候比较方便,使用数组传递后implode就行了。
虽然只是一个小的改进,对于小量数据已经可以看出明显的改善,对于大批量数据效果优化效果似乎更佳。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值