mysql 尽量使用Union All,而不建议使用Union

mysql  尽量使用Union All,而不建议使用Union,但也不是全部场景都这样:

 

在 MySQL 优化中,推荐尽量使用 UNION ALL 代替 UNION 的原因主要是两者在处理结果集和性能上的差异。

结果集处理

  • UNION:它会自动去除结果集中的重复行。这意味着 MySQL 需要执行额外的步骤来检查并删除重复的行。
  • UNION ALL:它只是简单地将两个或多个查询的结果集合并在一起,而不会检查或删除重复的行。

性能

  • 由于 UNION 需要检查并删除重复的行,因此它通常比 UNION ALL 慢。这个差异在大数据集上尤其明显。
  • 当你确定结果集中不会有重复行时(或者你不关心重复行),使用 UNION ALL 可以显著提高查询性能。

其他注意事项

  • UNION 和 UNION ALL 中的每个查询都必须有相同数量的列。这些列也必须有相似的数据类型。
  • 你可以使用 ORDER BY 子句对 UNION 或 UNION ALL 的结果集进行排序,但 ORDER BY 必须位于最后一个查询之后(对于 UNION 或 UNION ALL)。
  • 你可以使用 LIMIT 和 OFFSET 子句与 UNION 或 UNION ALL 一起使用,以限制返回的行数。

综上所述,如果你确定结果集中不会有重复行,或者你不关心重复行,并且希望提高查询性能,那么应该使用 UNION ALL 而不是 UNION。

 

posted @ 2023-04-02 08:47  方达达  阅读(27)  评论(0编辑  收藏  举报