mysql - 使用 UNION ALL 添加任意元组时的性能损失

标签 mysql sql

我想将任意元组添加到包含 180 万行的 SELECT 结果中。我决定像这样使用 UNION 运算符:

SELECT 
    id as id
FROM 
    user
UNION
SELECT 
    -1 as id

哪个返回:

+---+
| id|
+---+
| -1|
+---+
| 01|
+---+
| 02|
+---+
|...|
+---+

然而,使用和不使用 UNION 运算符的查询之间的性能损失是巨大的。我尝试使用这样的 UNION ALL 语句:

SELECT 
    id as id
FROM 
    user
UNION ALL
SELECT 
    -1 as id

这 - 我认为 - 可能是性能损失背后的原因,但性能损害仍然存在。

我错过了什么吗?我只是想向 SELECT 结果添加一个额外的任意元组。

最佳答案

使用 UNION(或 UNION ALL)似乎会导致创建一个临时表。看这个bug供引用。

创建一个包含 180 万行的临时表可能是导致速度下降的原因。

好消息是,5.7.3 似乎在某些情况下改变了这种行为。请参阅链接的错误报告中的最后一篇文章。

关于mysql - 使用 UNION ALL 添加任意元组时的性能损失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30775986/

相关文章:

python - 使用 python 从 MYSQL 数据库中显示随机抽认卡

java - 从 MySQL 加载数据库表

php - 如何在 CI Active Record 中按 MAX 日期进行选择

python - Flask - 无法更新 mysql 中的数据库

java - 如何解决无法连接到/192.168.15.186(端口80): connect failed: ETIMEDOUT (Connection timed out) in Windows Firewall

mysql - 在两个不同的组中使用 ORDER BY 的 SQL 查询

sql - 在 WHERE 子句中使用自定义函数加速更新

sql - 如何查看日期是否在当前月份的SQL Server中?

sql - 两个查询是否相同?

php、MySQL、fpdf 和 $_Get?