gpt4 book ai didi

postgresql - Postgres - 读取日期之前或之后的日期索引 (<, <=, >, >=)

转载 作者:行者123 更新时间:2023-11-29 13:07:49 25 4
gpt4 key购买 nike

当我的情况在给定日期之前或之后时,我的日期索引出现问题。使用运算符(<、<=、>、>=)。

我的 table 是这样的

CREATE TABLE date_playground
(
id BIGSERIAL NOT NULL,
due_date date NOT NULL,

primary key (id)
);

我的索引是

CREATE INDEX date_playground_idx_due_date
ON date_playground (due_date);

当我的查询是

-- SAMPLE  1 
EXPLAIN ANALYZE SELECT
*
FROM date_playground
WHERE due_date = '2019-09-07' :: DATE;

这使用了索引

QUERY PLAN
Index Scan using date_playground_idx_due_date on date_playground (cost=0.42..279.73 rows=75 width=287) (actual time=0.043..0.071 rows=10 loops=1)
Index Cond: (due_date = '2019-09-07'::date)
Planning Time: 0.636 ms
Execution Time: 0.140 ms

但是,当我使用规定的运算符时 - <, <=, >, >=

-- SAMPLE 2
EXPLAIN ANALYZE SELECT
*
FROM ln.amortization_schedule_active a
WHERE due_date <= '2019-09-07' :: DATE;

QUERY PLAN
Seq Scan on date_playground (cost=0.00..35133.86 rows=396944 width=287) (actual time=0.032..443.417 rows=404839 loops=1)
Filter: (due_date <= '2019-09-07'::date)
Rows Removed by Filter: 331870
Planning Time: 0.437 ms
Execution Time: 483.891 ms

它从不使用索引,它总是执行全扫描。

谁能建议我如何优化第二个查询?

谢谢!

最佳答案

PostgreSQL 可以在您的第二个查询中使用索引,但它正确地选择不这样做,因为这样做效率很低。

对于选择表中一半行的查询,顺序扫描比索引扫描更有效:索引扫描无论如何都必须访问大部分表 block ,所以为什么要费心随机 I/O 或构建位图?

关于postgresql - Postgres - 读取日期之前或之后的日期索引 (<, <=, >, >=),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58831028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com