联合替代使查询更有效。 Mysql的

时间:2016-03-21 12:40:54

标签: mysql sql mysql-workbench

以下是我的查询

    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次。所以慢慢来。

1 个答案:

答案 0 :(得分:0)

首先,您的查询似乎是在“联合”中组合两种非常不同类型的数据 - 第一部分是ID的计数,第二部分是文字ID - 所以我会质疑这是否是真正做你打算做的事情。但是,只需将其视为面值,就可以消除第一部分中的子查询,如下所示:

SELECT COUNT(pr.prid)
FROM jcp
    INNER JOIN pr 
    ON pr.prid = jcp.prid
WHERE jcp.custid = 123 

我不知道在不了解您的数据背景的情况下有多大帮助您的表现,但它肯定不会受到伤害。

鉴于两个数据集的不同,如果要将这两个不同的数据位强制转换为同一列,则似乎无法避免联合。如果你把它们放在不同的列中,你可能会避免联合。