UNION 与 UNION ALL 的性能对比
Performance of UNION vs UNION ALL
我正在通过 UNION 或 UNION ALL 从多个表中选择一列外键。
当重复无关紧要时,通常建议使用 UNION ALL 而不是 UNION 来解决性能问题。但是,在我的调用 PHP 脚本中,循环遍历和操作数据而不重复会更有效。
所以,我可以使用以下任一选项:
选项 1:
在数据库中使用UNION消除重复
选项 2:
在数据库中使用 UNION ALL 并使用 array_unique() 或其他类似函数消除我的 PHP 脚本中的数据。
我的假设是,在大多数情况下,选项 1 将是首选且更有效的方法,但是我没有任何证据支持该假设,并且不确定测试它的最佳方法,尤其是因为它可能取决于很多关于数据是什么。
我的假设在大多数情况下是否正确?如果是这样,为什么?如果不是,为什么不?
主要方面是 UNION 是 UNION DISTINCT 的快捷方式,因此
UNION和UNION ALL的性能差异与
有关
需要获得不同的结果,为此数据库引擎和查询优化器
肯定比基于PHP应用程序代码的过滤算法更有效和最高效。
此外,dictinct 操作可以受益于按功能分组的预优化
不仅如此,重复数据过滤一般是根据有序数据
而 select sql 函数在没有明确排序的情况下工作,
因此,需要使用应用程序过滤数据会导致效率降低和查询时间更长。
通常,数据库引擎比应用程序 PHP 函数代码更高效,因此选项 1 通常是更好的选择
速度方面,相对来说是微不足道的。完成所有 SELECTs
的工作比执行重复数据删除要多,无论您采用哪种方式。
因此,我建议说 UNION DISTINCT
,因为这比 array_unique(...)
对您来说击键次数少。
其他注意事项:
UNION ALL
会把更多的东西从服务器铲到客户端;这(在极端或遥远的情况下)可能是影响性能的一个因素。
- 如果你也在
UNION
上说 ORDER BY
,你也可以说 DISTINCT
。
GROUP BY
(在UNION
上)具有DISTINCT
的效果。
- 如果您谈论的是数百万行,请记住 PHP 可能会达到数组的内存限制,而 MySQL 基本上是无限的。
我正在通过 UNION 或 UNION ALL 从多个表中选择一列外键。
当重复无关紧要时,通常建议使用 UNION ALL 而不是 UNION 来解决性能问题。但是,在我的调用 PHP 脚本中,循环遍历和操作数据而不重复会更有效。
所以,我可以使用以下任一选项:
选项 1:
在数据库中使用UNION消除重复
选项 2:
在数据库中使用 UNION ALL 并使用 array_unique() 或其他类似函数消除我的 PHP 脚本中的数据。
我的假设是,在大多数情况下,选项 1 将是首选且更有效的方法,但是我没有任何证据支持该假设,并且不确定测试它的最佳方法,尤其是因为它可能取决于很多关于数据是什么。
我的假设在大多数情况下是否正确?如果是这样,为什么?如果不是,为什么不?
主要方面是 UNION 是 UNION DISTINCT 的快捷方式,因此
UNION和UNION ALL的性能差异与
有关
需要获得不同的结果,为此数据库引擎和查询优化器
肯定比基于PHP应用程序代码的过滤算法更有效和最高效。
此外,dictinct 操作可以受益于按功能分组的预优化
不仅如此,重复数据过滤一般是根据有序数据 而 select sql 函数在没有明确排序的情况下工作, 因此,需要使用应用程序过滤数据会导致效率降低和查询时间更长。
通常,数据库引擎比应用程序 PHP 函数代码更高效,因此选项 1 通常是更好的选择
速度方面,相对来说是微不足道的。完成所有 SELECTs
的工作比执行重复数据删除要多,无论您采用哪种方式。
因此,我建议说 UNION DISTINCT
,因为这比 array_unique(...)
对您来说击键次数少。
其他注意事项:
UNION ALL
会把更多的东西从服务器铲到客户端;这(在极端或遥远的情况下)可能是影响性能的一个因素。- 如果你也在
UNION
上说ORDER BY
,你也可以说DISTINCT
。 GROUP BY
(在UNION
上)具有DISTINCT
的效果。- 如果您谈论的是数百万行,请记住 PHP 可能会达到数组的内存限制,而 MySQL 基本上是无限的。