php - UNION 与 UNION ALL 的性能对比

标签 php mysql performance union 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 通常是更好的选择

关于php - UNION 与 UNION ALL 的性能对比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46260599/

相关文章:

php - 为什么 php 无法与本地 sql 数据库对话?

php - MySQL 源错误

javascript - 422(使用ajax提交表单时出现不可处理的实体错误

php - 可折叠面板在我的循环中每次都会增加它的 id

php - 无论 "array-order",MySql 都以相同的顺序显示结果

php - 使用递归 PHP 组织 mySQL 数据

performance - Matlab 中 parfor 循环优于 for 循环的具体例子

performance - Google PageSpeed - 设置到期日期

javascript - JSPerf、For 循环与 While 循环

php - cakephp上传插件-定义保存文件的目录