下面是我的问题
Select
count(t.prid)
from
(select
pr.prid
from
jcp
inner join pr ON pr.prid = jcp.prid
where
jcp.custid = 123 union select
pr.prid
from
jcl
inner join pr ON pr.prid = jcl.prid
where
jcl.custid = 123) as t
有什么办法能使它更有效率吗?此查询位于某个函数内,执行时间为1000秒。所以慢慢来。
最佳答案
首先,您的查询似乎是将“union”中两种非常不同的数据类型组合在一起(第一部分是ID的计数,第二部分是文本ID),所以我怀疑这是否真的在做您希望它按照所写的那样做的事情。但是,只要按面值计算,就可以消除第一部分中的子查询,如下所示:
SELECT COUNT(pr.prid)
FROM jcp
INNER JOIN pr
ON pr.prid = jcp.prid
WHERE jcp.custid = 123
在不知道数据上下文的情况下,我不能说这对性能有多大帮助,但肯定不会有什么影响。
考虑到两个数据集的差异,如果要将这两个不同的数据位强制到同一列中,似乎无法避免联合。如果你把它们放在不同的列中,你可能会避免联合。
关于mysql - 联合替代使查询更高效。 MySQL的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36131309/