小编fol*_*bis的帖子

不使用数字字段的索引

我在 Debian x86 上安装了 PG 服务器(9.0.4)。
在我的一张桌子中,我使用numeric(6,1)

CREATE TABLE mytable(name text, numfield numeric(6,1))
Run Code Online (Sandbox Code Playgroud)

还为此字段创建了索引:

CREATE INDEX mytable_numfield_idx ON mytable USING btree (numfield);
Run Code Online (Sandbox Code Playgroud)

如果我将此字段与实数值一起使用,一切都会很好。正如我看到的查询使用索引:

EXPLAIN ANALYZE SELECT * FROM kodiall WHERE kodgo=123.0
Run Code Online (Sandbox Code Playgroud)

在 mytable 上使用 mytable_numfield_idx 进行索引扫描(cost=0.00..8.27 rows=1 width=193)(实际时间=0.085..0.087 rows=1 loops=1)

索引条件:(numfield = 123.0)

总运行时间:0.131 毫秒

但是如果我使用 0.0 或 NULL 作为条件值,由于某种原因索引被忽略:

EXPLAIN ANALYZE SELECT * FROM kodiall WHERE numfield=0.0
--EXPLAIN ANALYZE SELECT * FROM kodiall WHERE numfield=NULL
Run Code Online (Sandbox Code Playgroud)

mytable 上的 Seq Scan (cost=0.00..57.80 rows=1080 width=193) (实际时间=0.033..1.853 rows=1088 loops=1)

过滤器:(numfield = …

postgresql index

6
推荐指数
1
解决办法
1947
查看次数

标签 统计

index ×1

postgresql ×1