我通过UNION或UNION ALL从多个表中选择一列外键。
当重复无关紧要时,通常建议使用UNION ALL而不是UNION来解决性能问题。但是,在我调用的PHP脚本中,循环和操作数据而不重复会更有效。
所以,我可以使用以下任一选项:
选项1:
在数据库中使用UNION来消除重复
选项2:
在数据库中使用UNION ALL,并使用array_unique()或其他类似函数消除PHP脚本中的数据。
我的假设是,在大多数情况下,选项1将是首选且更有效的方法,但是我没有任何支持该假设,也不确定测试它的最佳方法,因为它可能很大程度上取决于关于数据是什么。
在大多数情况下,我的假设是否正确?如果是这样,为什么?如果没有,为什么不呢?
答案 0 :(得分:2)
主要方面是UNION是UNION DISTINCT的捷径,所以
UNION和UNION ALL之间的性能差异与中国有关 需要获得一个独特的结果,为此数据库引擎和查询优化器 肯定比基于应用程序中的PHP代码的filtring alogoritm更有效和最有效。
此外,dictinct Operation还可以从逐个功能的预优化中受益
不仅重复数据过滤通常基于有序数据 而select sql函数在没有显式排序的情况下工作, 因此,需要使用应用程序过滤数据可能会导致查询效率降低和更长时间。
通常,db引擎比应用程序PHP函数代码更有效,因此选项1通常是更好的选择
答案 1 :(得分:1)
速度方面,这是相对微不足道的。完成所有SELECTs
工作的努力不仅仅是去重复,无论你采取哪种方式。
因此,我建议您说UNION DISTINCT
,因为对您来说只需按键array_unique(...)
。
其他考虑因素:
UNION ALL
会将更多内容从服务器转移到客户端;这(在极端或遥远的情况下)可能是表现的一个因素。ORDER BY
上说UNION
,那么您也可以DISTINCT
。GROUP BY
(在UNION
上)具有DISTINCT
的效果。