我有类似这样的陈述,但都已经过时了:
SELECT COUNT(*) FROM A WHERE A.value1 IN ( SELECT A.value1 FROM A WHERE A.value2 = 0 )
表a中有13000000+行,由于某些原因,我不能使用索引。那么如何在不使用索引的情况下加速呢?我正在使用MySQL5.6。请帮忙。
nwo49xxi1#
我会先尝试使用 exists . 这通常可以更好地优化:
exists
SELECT COUNT(*) FROM A WHERE EXISTS (SELECT 1 FROM A A2 WHERE A2.value2 = 0 AND A2.value1 = A.value1 );
这方面的最佳指标是 A(value2, value1) .您还可以使用两个聚合级别:
A(value2, value1)
select sum(cnt) from (select value1, count(*) as cnt from a group by value1 having sum(value2 = 0) > 0 ) a;
1条答案
按热度按时间nwo49xxi1#
我会先尝试使用
exists
. 这通常可以更好地优化:这方面的最佳指标是
A(value2, value1)
.您还可以使用两个聚合级别: