我有一个表产品推荐合适的索引上我的数据库
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
有没有我们可以做任何替代办法?
天哪,我有同样的想法:D但没有发布,因为它感觉有点hacky。 – pozs
我认为这是一种恭维:^) –