gpt4 book ai didi

postgresql - 在我的数据库上建议合适的索引

转载 作者:行者123 更新时间:2023-11-29 12:09:44 25 4
gpt4 key购买 nike

我有一个表产品

Product(id  BIGINT,
... Some more columns here
expired DATE);

我想在过期字段上创建索引以加快检索速度。

大部分时间我的where子句是

       ...
WHERE (expired IS NULL OR expired > now());

请问您能建议哪个索引更适合我。

当我对上述查询执行解释分析时

EXPLAIN ANALYZE
SELECT 1
FROM product
WHERE (expired IS NULL) OR (expired > now());

它给了我以下结果。其中它没有使用我创建的索引。

Seq Scan on product  (cost=0.00..190711.22 rows=5711449 width=0) (actual time=0.009..8653.380 rows=7163105 loops=1)
Filter: ((expired IS NULL) OR (expired > now()))
Rows Removed by Filter: 43043
Planning time: 0.117 ms
Execution time: 15679.478 ms
(5 rows)

我猜这是因为“或”条件。我试图创建函数基础索引,但它给了我以下错误

   ERROR: functions in index expression must be marked IMMUTABLE

我们有什么替代方法吗?

最佳答案

您应该将 WHERE 子句更改为如下所示:

... WHERE COALESCE(expired, DATE 'infinity') > current_date;

这等同于您的查询,但现在您可以使用以下索引:

CREATE INDEX ON product (COALESCE(expired, DATE 'infinity'));

关于postgresql - 在我的数据库上建议合适的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42674316/

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