下面是我的问题

    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/

10-12 17:55