我读过10个左右的“教程”,它们都涉及同样的事情:
IE:
SELECT COUNT(*)
FROM table
WHERE something = ?
SELECT *
FROM table
WHERE something =?
LIMIT ? offset ?`
两个非常相似的查询,不是吗?必须有一个更好的方法来做到这一点,我的数据集是600,000多行并且已经迟缓(结果由超过30个where子句确定,并且因用户而异,但当然正确索引)。
答案 0 :(得分:2)
不幸的是,为了获得查询时的确切计数,postgresql必须遍历符合条件的所有行,并查看它们是否对您的事务可见。但是您可能不需要完全计数,因为只要您将结果发送给用户,结果就会过时。所以你可以尝试一些事情:
WHERE sex='male' AND has_breasts=true
之类的东西会假设25%会匹配,这可能是一个数量级的关闭。如果您使用analyze运行说明,则可以检查计划程序预计必须经历多少行才能获得结果的第一页,实际需要经历多少行,并相应地缩放估计值。这可能与Google用于估算与您的查询匹配的页数有些类似。如果我没记错的话,Lucene应该支持类似的估计。答案 1 :(得分:1)
使用统计数据进行计数估算。这将有助于创建,并且不会给你带来太多开销。
答案 2 :(得分:0)
您可能需要考虑使用光标。
答案 3 :(得分:0)
您可以CREATE TABLE AS
并将所有结果放在新表中。如果TEMP表不是一个选项,则必须管理创建的表。