我有一个有趣的问题,我想对一个用户可以提供多少服务实施一个特定的限制。报价保存在postgresql(10版)数据库中,不应超过1000。
我使用以下sql查询来检查一个用户有多少个优惠,并对照限制进行检查:
select count(*) from offers where offers.userId = 'b27e1d2f-c2c1-4d0b-8451-287013d7b716';
在性能指标中,我看到大部分时间都花在这个查询上。所以我查了一下发现这个:https://wiki.postgresql.org/wiki/Slow_Counting
PostgreSQL仍然需要读取生成的行以验证它们是否存在;
在查询规划器中可以看到,除了索引之外,只需要扫描一些堆获取,我认为这会减慢整个查询的速度:
Index Only Scan using offers_by_user_id_index on offers
Index Cond: (account_id = 'b27e1d2f-c2c1-4d0b-8451-287013d7b716'::uuid) | Heap Fetches: 650
-有什么方法可以加快速度?
跟踪行数是加快检查速度的好方法吗?
谢谢你的帮助!
编辑:USEID是UUID,在UUID列上存在索引
最佳答案
堆获取的数量表明表没有足够频繁地清空。如果你手动吸尘,会加速吗?