我有一个查询,我通过一个正常的文本列和一个JSON列中的值查询。我想知道的是如何为查询创建最佳索引?
这是查询:
explain select * from "tags" where "slug"->>'en' = 'slugName'
and "type" in ('someType1','someType1');
-------
Seq Scan on tags (cost=0.00..1.47 rows=1 width=888)
" Filter: (((type)::text = ANY ('{dsfdsf,fgsdf}'::text[])) AND ((slug ->> 'en'::text) = 'dsfdsf'::text))"
"slug"列是JSON类型,并且"类型"为";列类型为varchar(191)。我很熟悉,我可以添加一个索引JSON列,如:
CREATE INDEX tag_slug_index ON tags USING btree ((slug ->> 'en'));
但是我想知道,我如何创建一个多列索引上的鼻涕虫名称与类型列相结合?
没有什么特别的,你只是按正常的方式做,用逗号分隔它们:
CREATE INDEX ON tags USING btree ("type", (slug ->> 'en'));
表达式仍然需要放在一个额外的括号中,如果它是索引中唯一的"列"也是如此。