以下查询适用于 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
任何人都可以提振它吗?
以下查询适用于 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
任何人都可以提振它吗?
首先,不要在 中使用不必要的子查询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;
这只进行一次聚合。而且我它也应该利用相同的索引。