PostgreSQL中ltree字段查询未使用Gist索引的原因是什么?
ltree Gist索引未生效原因
1. 根本原因:测试数据量过小,优化器成本计算倾向顺序扫描
PostgreSQL查询优化器会根据实际数据规模计算不同执行计划的成本,优先选择总成本最低的方案:
- 当前测试表仅插入8条数据,全表扫描仅需读取1个数据页即可完成查询,耗时极短
- 若走Gist索引,需要先读取索引页定位匹配行,再回表读取对应数据,额外的IO开销反而高于全表扫描,因此优化器主动选择了顺序扫描
2. 验证方案
你可以向hierarchy_table表中插入1万条以上的ltree测试数据,重新执行查询后查看执行计划,即可看到Gist索引被正常触发。
3. 补充说明
你使用的@>包含操作符本身属于ltree Gist索引的原生支持操作符,不存在操作符不匹配导致的索引失效问题。
内容的提问来源于stack exchange,提问作者László Tóth
相关产品推荐
相关产品推荐

