[英]Postgres: Create index on that text is null or not
假設我們有一張桌子:
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 NULL
或comment IS NOT NULL
,但是我們不需要全文搜索。
是否可以通過某種方式為此創建索引,而不創建全文索引?
索引僅在WHERE
條件為選擇性的情況下才有幫助,也就是說,它會過濾掉很大一部分行。 確實,如果條件不是選擇性的,PostgreSQL將更喜歡高效的順序掃描。
因此,您不能擁有一個對這兩種情況都有幫助的索引,但是您可以擁有一個對這兩種情況較少發生的幫助的索引。
如果注釋通常為NULL,則可以使用:
CREATE INDEX ON "Comments" (id) WHERE comment IS NOT NULL;
除了Laurenz的答案之外,如果您沒有那么多的注釋為null的情況,則可以使用btree索引,因為它們可用於查找:
create index comments_comment_idx ON "Comments" (comment);
只要注釋足夠短而不會被烘烤,您就可以搜索它們是否相等。 您也可以搜索范圍和前綴。 但是,如果它們持續幾kb,您可能會開始遇到問題,因此,僅在預計注釋會相當短的情況下才建議使用此方法。
進一步說明,還有其他優化此類查詢的方法。 進一步說明,如果您要通過id進行大量排序,則可能需要創建多列索引,該索引將允許僅索引掃描:
create index comments_comment_id_idx ON "Comments" (id, comment);
如果您想要最后五個ID(例如,comment不為null),這將很有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.