PostgreSQL 忽略 TEXT 字段上的(唯一)索引

Ton*_*ark 4 postgresql index postgresql-9.4

我有一张users类似于

CREATE TABLE users (
  id bigserial NOT NULL,
  msisdn text NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

以及在 上UNIQUE定义的约束msisdn

ALTER TABLE users ADD CONSTRAINT UNIQUE (msisdn);
Run Code Online (Sandbox Code Playgroud)

现在,我试着跑

EXPLAIN SELECT * FROM users WHERE msisdn = '000000000001';
Run Code Online (Sandbox Code Playgroud)

和 PostgreSQL 正在回归

Seq Scan on users  (cost=0.00..7.80 rows=1 width=400)
  Filter: (msisdn = '000000000001'::text)
Run Code Online (Sandbox Code Playgroud)

该表目前有 256 行。会不会是表太小以至于PostgreSQL认为做全表扫描而不是扫描索引更好?如何确保 PostgreSQL 实际使用索引而不是进行全表扫描?

Ton*_*ark 7

超立方体??a_horse_with_no_name是对的:

表中的行太少了。对于 256 行,索引根本没有任何好处。

我添加了 100,000 行额外的行并EXPLAIN开始显示索引的使用情况。