0

以下查询适用于 10 条记录,但需要时间来获取更多记录:

SELECT s.a, s.b, s.c
FROM
(SELECT abc FROM h1
WHERE a IN
(SELECT a FROM h1 GROUP BY a HAVING COUNT(DISTINCT b) = 1 )) s

任何人都可以提振它吗?

4

1 回答 1

0

首先,不要在 中使用不必要的子查询FROM,所以这样写:

SELECT h.a, h.b, h.c
FROM h1 h
WHERE a IN (SELECT hh.a FROM h1 hh GROUP BY hh.a HAVING COUNT(DISTINCT hh.b) = 1);

这仍然会有非常糟糕的表现。您想要的是a值具有单个b. 所以:

select h.*
from h1 h
where not exists (select 1
                  from h1 hh
                  where hh.a = h.a and hh.b <> h.b
                 );

好多了。然后对于此查询,您需要在h1(a, b).

您也可以使用JOIN:

SELECT h.a, h.b, h.c
FROM h1 h JOIN
     (SELECT hh.a
      FROM h1 hh
      GROUP BY hh.a
      HAVING MIN(hh.b) = MAX(hh.b)
     ) hh
     ON hh.a = h.a;

这只进行一次聚合。而且我它也应该利用相同的索引。

于 2019-03-10T13:05:37.827 回答