联合替换以提高查询效率。Mysql
下面是我的问题联合替换以提高查询效率。Mysql,mysql,sql,mysql-workbench,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 有没有办
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秒。首先,您的查询似乎将两种不同类型的数据组合在您的“联合”中—第一部分是ID的计数,第二部分是文字ID—因此我怀疑这是否真的达到了您编写的目的。但是,仅从表面上看,您可以按如下方式消除第一部分中的子查询:
SELECT COUNT(pr.prid)
FROM jcp
INNER JOIN pr
ON pr.prid = jcp.prid
WHERE jcp.custid = 123
在不了解数据上下文的情况下,我不能说这对您的性能有多大帮助,但肯定不会有什么坏处
考虑到这两个数据集的差异,如果要将这两个不同的数据位强制放到同一列中,似乎不可能避免并集。如果您将它们放在不同的列中,您可能会避免联合。是否有一个表,其中custid是主键?如果您只向我们描述您的表(如中)和您的目标,这将非常有用,然后,我们甚至可以发现一个更简单的查询。只从jcp和jcl中获取单独的计数,然后在php(或函数所使用的任何语言)中将它们添加到一起可能会更快。两个非常快速的查询可能比一个不好的联合查询的性能更好。另外,为什么函数要这样做数千次?也许你也应该考虑做一个获取整个数据集的查询。一种
从中选择custid、count(prid)的方法。。。按客户ID分组