我正在使用以下内容查询我的数据库(Postgres 8.4):
SELECT COUNT(*) FROM table WHERE indexed_varchar LIKE 'bar%';
这个复杂度是 O(N) 因为 Postgres 必须计算每一行。Postgres 9.2 具有仅索引扫描,但不幸的是,升级不是一种选择。
但是,获得准确的行数似乎有点过头了,因为我只需要知道以下三种情况中的哪一种是正确的:
- 查询不返回任何行。
- 查询返回一行。
- 查询返回两行或多行。
所以我不需要知道查询返回 10,421 行,只需要返回两个以上。
我知道如何处理前两种情况:
SELECT EXISTS (SELECT COUNT(*) FROM table WHERE indexed_varchar LIKE 'bar%');
如果存在一行或多行,则返回 true,而 false 则不存在。
关于如何以有效的方式扩展它以涵盖所有三种情况的任何想法?