mysql - 优化 MariaDB 中的 1 次 SQL 更新语句

标签 mysql query-optimization mariadb

我正在尝试更新名为“locations”的表中的大约 40,000 条记录,总共 6 列。这 4 万条记录属于 6 个类别之一。类别为:列“Bin”值以“a”、“b”、“c”、“d”、“e”结尾,或以上均不结尾。

我编写了以下 Update 语句,目的是直接在服务器上的表上运行。

UPDATE locations
SET Division=1, Bin=LEFT(Bin, LENGTH(Bin)-1)
WHERE RIGHT(Bin, 1)='a';

UPDATE locations
SET Division=2, Bin=LEFT(Bin, LENGTH(Bin)-1)
WHERE RIGHT(Bin, 1)='b';

UPDATE locations
SET Division=3, Bin=LEFT(Bin, LENGTH(Bin)-1)
WHERE RIGHT(Bin, 1)='c';

UPDATE locations
SET Division=4, Bin=LEFT(Bin, LENGTH(Bin)-1)
WHERE RIGHT(Bin, 1)='d';

UPDATE locations
SET Division=5, Bin=LEFT(Bin, LENGTH(Bin)-1)
WHERE RIGHT(Bin, 1)='e';

我从来没有一次更新超过 1-5 条记录,并且不确定是否有更好的方法来做到这一点。

我可以使用 php 进行一些编码,因此如果解决方案需要合并它,我愿意接受这个想法。

如果我遗漏了任何相关或需要的信息,请告诉我。感谢您的帮助!

最佳答案

只有 40k 记录和 1 次更新,我不会太担心性能,但您可以尝试单个更新语句:-

UPDATE locations
SET Division =  CASE RIGHT(Bin, 1)
                    WHEN 'a'
                    THEN 1
                    WHEN 'b'
                    THEN 2
                    WHEN 'c'
                    THEN 3
                    WHEN 'd'
                    THEN 4
                    ELSE 5
                END,
Bin = LEFT(Bin, LENGTH(Bin)-1)
WHERE RIGHT(Bin, 1) IN ('a', 'b', 'c', 'd', 'e');

当前解决方案的可能缺点是记录的字段 bin 值为“edcba”

您的第一次更新将“Division”设置为 1,将 bin 设置为“edcb”,但下一次更新会将同一行设置为“Division”为 2,将 bin 设置为“edc”,等等

关于mysql - 优化 MariaDB 中的 1 次 SQL 更新语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35724593/

相关文章:

c# - 来自 Docker 的多个 Mysql 连接 -> 套接字错误

MySql 仅导出架构而不导出数据

MySQL GROUP BY 将查询速度减慢 1000 倍

php - WordPress SQL 将字符串插入自定义字段

mysql - 在 cygwin 中安装 mysql-python - 找不到 mysql_config [Windows 7]

mysql - 为了对分组数据进行排序而摆脱子查询

mysql - 用于优化小表上的重复查询的临时表或 View 的替代方案

mysql - 如何有效地锁定/阻止行?

mysql - 优化 MySql 查询以避免使用 "Using filesort"

mysql - 将连续的每月潜在客户计数作为 SQL 中的列?