我有一个非常简单的SQL查询:
SELECT COUNT(DISTINCT x) FROM table;
我的表大约有150万行。该查询运行缓慢。大约需要7.5秒,而
SELECT COUNT(x) FROM table;
大约需要435ms。有什么方法可以更改查询以提高性能?我试过分组并进行常规计数,以及在x上放置索引;两者具有相同的7.5s执行时间。
我不这么认为。获得150万行的不同值只会很慢。
—
Ry-
我刚刚在C#中进行了尝试,从内存中获取150万个整数的不同值在我的计算机上花费了超过一秒钟的时间。因此,我认为您可能不走运。
—
Ry-
查询计划将在很大程度上取决于表结构(索引)和调整常量(工作)的设置(工作存储器,有效缓存大小,随机页成本)。通过合理的调整,查询可能会在不到一秒钟的时间内执行。
—
wildplasser 2012年
你可以再详细一点吗?要在一秒钟内获得它,需要什么索引和调整常数?为简单起见,假设这是一个两列表,第一列y上有主键,而我正在对int类型的第二列x(具有150万行)进行“区别”查询。
—
ferson2020
请在表定义中包含所有索引(
—
vyegorov 2012年
\d
输出psql
为好)并精确描述您遇到问题的列。最好看到EXPLAIN ANALYZE
两个查询。