我目前在postgresql数据库中有2000条记录,每分钟更新一次,用SQL语句过滤。可以存在多达1000种不同的过滤器组合,每分钟可以调用大约500种不同的过滤器。目前,http响应缓存59秒,以减轻服务器负载和数据库调用。但是我考虑在memcached中缓存整个db表并在php中进行过滤。 2000行不是很多但是从内存和数据库获取数据的响应时间会更快。
对于这个行数,php处理时间是否会超过sql过滤的数据库响应时间?在可预见的未来,该表不应超过3000行。
答案 0 :(得分:4)
与任何与is x faster than y
相关的问题一样,唯一真正的答案是为自己进行基准测试。但是,如果数据库已针对您需要执行的查询进行了正确索引,则过滤结果集的速度可能比您编写的大多数PHP代码快得多。
另一方面,RDBMS已经过设计和优化,可用于定位,过滤和排序行。
答案 1 :(得分:1)
PostgreSQL运行的方式,如果你不是非常匮乏它的内存,100%这样一个经常查询的小表将由默认的缓存算法保存在RAM(缓存)中。拥有数据库引擎过滤器几乎肯定比在应用程序中执行相同操作更快。
您可能需要检查postgresql.conf
,尤其是shared_buffers
,planner cost constants(设置random_page_cost
几乎或完全低至seq_page_cost
)和{{ 3}}(设置得足够高)。
您可能会从优化索引中受益。有各种类型可供选择。除了普通索引之外,还要考虑effective_cache_size
。使用partial indexes, indexes on expression or multi-column indexes进行测试,仅保留实际使用的索引并加快查询速度。由于所有表都驻留在RAM中,因此查询计划程序应计算随机访问几乎或完全与顺序访问一样快。差异仅适用于光盘读取。
在每分钟更新时,请确保不以保留任何实际上没有帮助的索引。而且,在这种情况下,经常抽真空和分析它是性能的关键。不是VACUUM FULL ANALYZE
,只是VACUUM ANALYZE
。或者使用带有调整设置的自动真空。
当然,EXPLAIN ANALYZE的所有标准建议都适用。