MySQL多行update合并一行书写

MySQL多行update合并一行书写,第1张

需求:

如何将多条update语句合并为一条update语句:

如,update table1 set col='2012' haha='hello' where id='2014001'

update table1 set col='1009' haha='nihao' where id='2014003'

上面 这两行 执行之后,每一条需要5秒,总共需要10秒才能执行完.

如何合并为一条?

在网上找了好久,总结了一个相对简单的语句(有些语句是函数语句,有点晕),如下:

update table1 set col=(case id

when '2014001' then '2012'

when '2014003' then '1009' end),

haha=(case id

when '2014001' then 'hello'

when '2014003' then 'nihao' end)

where id in('2014001','2014003')

改成这个之后,还是需要5秒,但是,它只执行了一次,所以只需要5秒

您好.

以前有高人写过类似的:

select id,group_concat(re_id order by re_id separator ",") as re_id

from tablename

group by id

方法2:

select group_concat(list_name) from aa_list

如果还有问题,可以继续追问,感谢。

索引合并是mysql底层为我们提供的智能算法。了解索引合并的算法,有助于我们更好的创建索引。

索引合并是通过多个range类型的扫描并且合并它们的结果集来检索行的。仅合并来自单个表的索引扫描,而不是跨多个表的索引扫描。合并会产生底层扫描的三种形式:unions(合并)、intersections(交集)、unions-of-intersections(先取交集再合并)。

以下四个例子会产生索引合并:

索引合并有以下已知的局限性:

1、如果查询语句包含一个带有严重AND/OR嵌套的复杂的WHERE子句而MySQL没有选择最佳计划,那么可以尝试使用以下的标志符转换:

(x AND y) OR z =>(x OR z) AND (y OR z)

(x OR y) AND z =>(x AND z) OR (y AND z)

2、索引合并不适用于全文索引。

在 EXPLAIN 语句输出的信息中,索引合并在type列中表现为“index_merge”,在这种情况下,key列包含使用的索引列表。

索引合并访问方法有几种算法,表现在 EXPLAIN 语句输出的Extra字段中:

下面将更详细地描述这些算法。优化器根据各种可用选项的成本估计,在不同的索引合并算法和其他访问方法之间进行选择。

Index Merge Intersection算法

Index Merge Intersection算法对所有使用的索引执行同步扫描,并生成从合并的索引扫描接收到的行序列的交集。

这种算法适用于当WHERE子句被转换成多个使用AND连接的不同索引key上的范围条件,且条件是以下两种之一:

一、这种形式的N部分表达式,索引正好包括N个字段(所有索引字段都被覆盖),N>=1,N如果大于1就是复合索引:

二、InnoDB表主键上的任何范围条件。

例子:

Index Merge Union算法

该算法类似于Index Merge Intersection算法,适用于当WHERE子句被转换成多个使用OR连接的不同索引key上的范围条件,且条件是以下三种之一:

一、这种形式的N部分表达式,索引正好包括N个字段(所有索引字段都被覆盖),N>=1,N如果大于1就是复合索引:

二、InnoDB表主键上的任何范围条件。

三、符合Index Merge Intersection算法的条件。

例子:

Index Merge Sort-Union算法

该算法适用于当WHERE子句被转换成多个使用OR连接的不同索引key上的范围条件,但是不符合 Index Merge Union算法的。Index Merge Sort-Union和Index Merge Union算法的区别在于,Index Merge Sort-Union必须首先获取所有行的行id并在返回任何行之前对它们进行排序。

例子:

有好的建议,请在下方输入你的评论。

欢迎访问个人博客

https://guanchao.site


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8369973.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存