使用 PostgreSQL 9.6.9,我有:
- 在某个表 xy 的列中使用的具有 3 个级别的自定义 SQL 枚举类型。
- 表 xy 上此枚举的最高级别 (level3) 的复合部分索引。
- 大量虚拟数据(超过 200000 行)
在控制台中使用EXPLAIN ANALYSE
,我看到:
SELECT ... FROM xy WHERE ... AND custom_type = 'level3' <--- Index Scan used
但:
SELECT ... FROM xy WHERE ... AND custom_type > 'level2' <--- Index Scan NOT used
除了不等式/相等条件外,查询完全相同。
数据库规划器是否无法看到 level2 以上只能是 level3,因此它可以使用部分索引?
为什么 Postgres 没有正确优化这个……这似乎是一些简单的逻辑事情。