如何使用多列和顺序索引Postgresql查询

脑膜炎

此查询需要2秒钟才能完成:

explain analyze select
    *
from
    "MdChapters" as "MdChapter" 
where
    ("MdChapter"."countryCode" = 'gb' AND "MdChapter"."deletedAt" is  null)
order by
    "MdChapter"."id" desc 
limit 100;
Limit  (cost=56.35..56.38 rows=13 width=2656) (actual time=1854.038..1854.409 rows=100 loops=1)
  ->  Sort  (cost=56.35..56.38 rows=13 width=2656) (actual time=1854.035..1854.163 rows=100 loops=1)
        Sort Key: id DESC
        Sort Method: top-N heapsort  Memory: 150kB
        ->  Bitmap Heap Scan on "MdChapters" "MdChapter"  (cost=4.56..56.10 rows=13 width=2656) (actual time=49.818..1355.082 rows=327179 loops=1)
              Recheck Cond: ((("countryCode")::text = 'gb'::text) AND ("deletedAt" IS NULL))
              Heap Blocks: exact=47298
              ->  Bitmap Index Scan on test  (cost=0.00..4.55 rows=13 width=0) (actual time=42.630..42.632 rows=328948 loops=1)
                    Index Cond: ((("countryCode")::text = 'gb'::text) AND ("deletedAt" IS NULL))
Planning time: 0.200 ms
Execution time: 1854.567 ms

但是此查询只需<0.1s:

select
    *
from
    "MdChapters" as "MdChapter" 
where
    ("MdChapter"."countryCode" = 'gb')
order by
    "MdChapter"."id" desc 
limit 100;

我在columcountryCodedeletedAt

CREATE INDEX md_chapters_deleted_at_country_code ON public."MdChapters" USING btree ("deletedAt", "countryCode");
卢卡斯·索兹达(Lukasz Szozda)

我会创建过滤/局部索引

CREATE INDEX md_chapters_deleted_at_country_code2 ON public."MdChapters" 
USING btree ("countryCode", "id")
WHERE ("deletedAt" IS NULL);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

棘手的PostgreSQL连接和顺序查询

来自分类Dev

从多列和顺序中选择数据

来自分类Dev

非顺序索引收集

来自分类Dev

非顺序索引收集

来自分类Dev

如何结合SQL查询的位置和顺序

来自分类Dev

如何使用多列索引优化MySQL查询?

来自分类Dev

非顺序索引模型绑定

来自分类Dev

PostgreSQL手动更改查询执行计划以强制使用排序和顺序访问而不是完全扫描

来自分类Dev

如何查询使用索引的PostgreSQL表?

来自分类Dev

SQL查询多列顺序

来自分类Dev

如何在“投影和顺序”中使用“标准”?

来自分类Dev

按顺序索引增加字符串

来自分类Dev

不同的顺序索引中的相同字段不同

来自分类Dev

按顺序索引增加字符串

来自分类Dev

删除对象中具有顺序索引的属性

来自分类Dev

MySQL:多列索引,多列索引的顺序重要吗?

来自分类Dev

如何使用多列索引优化MERGE

来自分类Dev

如何以编程方式使用包含多列的 where-in 子句执行 PostgreSQL 查询?

来自分类Dev

MySQL不对某些查询使用多列索引

来自分类Dev

寻找多列索引的最佳顺序

来自分类Dev

PostgreSQL查询未使用索引

来自分类Dev

PostgreSQL 查询不使用索引

来自分类Dev

PostgreSQL-如何使用索引进行此类查询

来自分类Dev

PostgreSQL:如何使用加密列查询

来自分类Dev

Rails查询和顺序与用于查询的数组相同

来自分类Dev

随机索引数组比顺序索引有任何性能影响吗?

来自分类Dev

如何在Bootstrap的不同屏幕尺寸上排列列的位置和顺序?

来自分类Dev

多列WHERE子句中的PostgreSQL索引

来自分类Dev

MySQL查询多列索引表