Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
联合替换以提高查询效率。Mysql_Mysql_Sql_Mysql Workbench - Fatal编程技术网

联合替换以提高查询效率。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分组