gpt4 book ai didi

php - 分页数据,必须是更好的方法

转载 作者:行者123 更新时间:2023-11-29 12:06:53 28 4
gpt4 key购买 nike

我读过大约 10 个“教程”,它们都涉及相同的内容:

  • 提取数据集的计数
  • 拉取相关数据集(LIMIT、OFFSET)

即:

SELECT COUNT(*) 
FROM table
WHERE something = ?

SELECT *
FROM table
WHERE something =?
LIMIT ? offset ?`

两个非常相似的查询,不是吗?必须有更好的方法来做到这一点,我的数据集有 600,000 多行并且已经很慢了(结果由 30 多个 where 子句决定,并且因用户而异,但当然索引正确)。

最佳答案

不幸的是,为了获得查询时的准确计数,postgresql 必须遍历所有符合条件的行,看看它们是否对您的事务可见。但是您可能不需要精确 计数,因为一旦您将结果发送给用户,结果就已经过时了。所以有些事情你可以尝试:

  1. 缓存后续查询的计数,因此成本仅针对第一页(可能帮助不大,反正大多数人只看第一页)
  2. 如果查询匹配良好,请使用专门的倒排索引搜索引擎进行搜索。 Lucene/Solr 是不错的选择。
  3. 如果有时计数严重偏离不是问题,请使用 postgresql 的内置统计信息来估计可能匹配的行数。您可以通过对查询执行 EXPLAIN 来获取数字。至少为相关表增加统计目标以获得更准确的数字。多个谓词的数字可能仍然有很大差异,因为规划器不知道不同谓词之间的相关性并假设它们不相关。所以诸如 WHERE sex='male' AND has_breasts=true 之类的东西将假设 25% 会匹配,这可能相差一个数量级。如果您运行带分析的解释,您可以检查规划器预期必须经过多少行才能获得第一页结果,实际必须经过多少行,并相应地调整估计值。这可能有点类似于谷歌用来估计有多少页面与您的查询匹配的方法。如果我没记错的话,Lucene 应该支持类似的估计。

关于php - 分页数据,必须是更好的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3063489/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com