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

来源:互联网 发布:java log4j的使用 编辑:程序博客网 时间:2024/05/16 18:49
在应用开发的时候经常会使用到一对多、多对多之类的关联表,在插入数据比较多的时候可以考虑优化的方法。
举个简单的例子,有个用户表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就行了。
虽然只是一个小的改进,对于小量数据已经可以看出明显的改善,对于大批量数据效果优化效果似乎更佳。
原创粉丝点击