postgresql - Postgresql 查询在逻辑或中包含常量导致全表扫描
问题描述
我有一个包含形式子句的查询CONSTANT OR t.foo=:foo
,其中 CONSTANT 是一些表达式,其计算结果为常量布尔值。然后查询作为全表扫描执行,即使列 foo 上有索引并且简单t.foo=:foo
会使用该索引。我分析的示例查询具有:foo IS NOT NULL OR t.foo=:foo
. 这是一个简单的例子:
CREATE TABLE tst (
id serial,
name VARCHAR NOT NULL,
age INTEGER NOT NULL,
CONSTRAINT PK_ID PRIMARY KEY(ID));
EXPLAIN SELECT * FROM tst WHERE (23 IS NOT NULL OR id=23);
QUERY PLAN
--------------------------------------------------------
Seq Scan on tst (cost=0.00..22.00 rows=1200 width=40)
这有什么原因吗?有没有办法告诉优化器在逻辑上评估/简化查询?
解决方案
推荐阅读
- arduino - Arduino脉冲计数器
- graph - 无向图中的第 K 条最短路径
- spring-boot - 码头港口不可用
- linux - 检查 linux/chrome 操作系统上的多架构?
- c# - 缺少将 web api 2 添加到现有 .net web 表单项目的参考
- flutter - 在 Flutter 中通过拖放重新排序 SliverList 中的项目
- c++ - 为什么不能比较两个 int 类型变量的值?
- python - 训练自定义 HOG 分类器并识别测试集图像或帧中的对象
- angular - @angular/common/http 没有导出成员 'RequestOptions'
- python - 是否有理由能够在 .format 中声明变量?