UNION 与 UNION ALL 的性能对比

koj*_*ow7 0 php mysql performance union union-all

我通过 UNION 或 UNION ALL 从多个表中选择一列外键。

当重复项不重要时,通常建议使用 UNION ALL 而不是 UNION 来解决性能问题。然而,在我的调用 PHP 脚本中,循环和操作数据而不重复会更有效。

因此,我可以使用以下任一选项:

选项1:

数据库中使用UNION消除重复项

选项2:

在数据库中使用 UNION ALL 并使用 array_unique() 或其他类似函数消除 PHP 脚本中的数据。

我的假设是,在大多数情况下,选项 1 将是首选且更有效的方法,但是我没有任何证据支持该假设,并且不确定测试它的最佳方法,特别是因为它可能在很大程度上取决于数据是。

我的假设在大多数情况下都是正确的吗?如果是这样,为什么?如果没有,为什么不呢?

sca*_*dge 5

主要方面是 UNION 是 UNION DISTINCT 的快捷方式,所以

UNION 和 UNION ALL 之间的性能差异与需要获得不同的结果有关
,为此数据库引擎和查询优化器肯定比应用中基于 PHP 代码的过滤算法更有效且最高效。

此外,dictinct 操作还可以受益于 group by 功能的预先优化

不仅如此,重复数据过滤通常基于有序数据,而 select sql 函数在没有显式排序的情况下工作,因此需要使用应用程序过滤数据可能会导致效率较低且查询时间更长。

一般来说,数据库引擎比应用程序 PHP 函数代码更高效,因此选项 1 通常是更好的选择