批量插入时如何避免重复执行同一SELECT语句获取相同值?
如何避免批量插入时重复执行同一SELECT语句?
当然不用每次都执行同一个SELECT,有两种简单高效的方法可以解决这个问题:
方法一:使用变量存储查询结果
先把table2中固定的name值查询出来存到变量里,之后批量插入时直接用这个变量就行,这样只需要执行一次SELECT:
-- 先获取固定值并存到变量 SET @fixed_name = (SELECT name FROM table2 WHERE id = 1); -- 批量插入时直接使用变量 INSERT INTO table1 (name, otherValue) VALUES (@fixed_name, 'outsideValue1'), (@fixed_name, 'outsideValue2'), (@fixed_name, 'outsideValue3');
方法二:用CROSS JOIN关联外部值
通过CROSS JOIN把查询到的固定值和你要插入的多个otherValue做关联,这样也只需要执行一次对table2的查询:
INSERT INTO table1 (name, otherValue) SELECT t2.name, v.other_value FROM table2 t2 CROSS JOIN ( VALUES ('outsideValue1'), ('outsideValue2'), ('outsideValue3') ) v(other_value) WHERE t2.id = 1;
这种写法的优势是不用额外定义变量,直接在INSERT语句里完成关联,适合一次性的批量插入操作。
你原来的写法会让数据库为每一行VALUES都执行一次SELECT查询,当插入行数很多时,会额外消耗数据库资源,上面两种方法都能避免这个问题,提升插入效率。
内容的提问来源于stack exchange,提问作者RDU
相关产品推荐
相关产品推荐

