sql - Postgres : Create index on that text is null or not

标签 sql postgresql

假设我们有一张表:

CREATE TABLE public."Comments"
(
    id integer NOT NULL DEFAULT nextval('"Comments_id_seq"'::regclass),
    comment text COLLATE pg_catalog."default",
    CONSTRAINT "Comments_pkey" PRIMARY KEY (id)
)

我们需要快速选择 comment IS NULLcomment IS NOT NULL 的行,但我们不需要全文搜索。

是否有可能以某种方式为此创建索引,但不创建全文索引?

最佳答案

只有当 WHERE 条件是选择性的,即它过滤掉很大一部分行时,索引才会对您有帮助。事实上,如果条件不是选择性的,PostgreSQL 会更喜欢更高效的顺序扫描。

因此,您无法拥有对这两种情况都有帮助的索引,但您可以拥有一个可能有助于解决这些情况中出现频率较低的情况的索引。

如果注释通常为 NULL,您可以使用:

CREATE INDEX ON "Comments" (id) WHERE comment IS NOT NULL;

关于sql - Postgres : Create index on that text is null or not,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46316661/

相关文章:

mysql - Oracle 日期聚合

sql - 为什么缺少主键/唯一键会导致更新插入时出现死锁问题?

ruby-on-rails - 如何在 CSV 上传过程中防止 SQL 注入(inject)?

django - Postgresql 由 sql 脚本更新,在后端得到通知

sql - 将 Zend Db Select 查询转换为 sql 查询

SQL:从表中获取最新的(未)订阅操作

sql - OR 和索引创建

sql - 如何在没有ORDER BY的情况下订购UNION中的条目?

sql - PostgreSQL 索引性能问题

sql - 将带有 `T` 的字符串解析为时间戳 PostgreSQL