我正在努力优化一个sql的效率它看起来像:
Insert into order_table ( id, business_line, order_type,...)
values(1123123,4,5,·····)
ON DUPLICATE KEY UPDATE
business_line = IF( _version <= 6 ,10,business_line),
order_type = IF( _version <= 6 ,2,order_type)
..........
有许多if条件
而且它运行得很慢。(约250ms(
有什么办法把这么多"如果"联系在一起吗?例如:
Insert into order_table ( id, business_line, order_type,...)
values(1123123,4,5,·····)
ON DUPLICATE KEY UPDATE
SET (business_line,order_type,...) =
IF( _version <= 6 ,(10,2),(business_line,order_type)),
..........
任何建议都将受到的赞赏
当目标是"更新";几个特定的行。使用唯一密钥(如id
(:
INSERT INTO t
(id, a,b,c)
VALUES
(654, 1,2,3),
(666, 11,22,33),
...
ON DUPLICATE KEY UPDATE
b = VALUES(b),
c = VALUES(c);
当目标是";插入";几个新行。不提供任何唯一值(例如AUTO_INCREMENT
id
(:
INSERT INTO t
(id, a,b,c)
VALUES
(NULL, 1,2,3),
(NULL, 11,22,33),
...
ON DUPLICATE KEY UPDATE
b = VALUES(b);
等效地,省略AUTO_INCREMENT
列和NULLs
列。
注意:8.0版本希望使用以下语法:
b = NEW.b
(注意:在你的环境中测试这个;我还没有对所有的变体进行实验。(
这种技术应该更快,因为:
- 只有一次往返服务器
- 如果是
autocommit=ON
,则该批次只有一个事务