【发布时间】:2012-11-22 10:15:26
【问题描述】:
我正在使用以下内容查询我的数据库(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。
关于如何以有效的方式扩展它以涵盖所有三种情况的任何想法?
【问题讨论】:
-
感谢提供版本,但实际上并没有任何 "8.x" 。 8.1 和 8.4 之间的差异是巨大的。见postgresql.org/support/versioning。
-
我没有意识到版本号的第二部分表示主要版本。帖子已更新。
-
是的……我不喜欢这个版本控制方案,但是改变它有很多阻力。
标签: sql postgresql