选择函数索引或新列索引

时间:2019-07-15 17:28:46

标签: sql postgresql

在我的数据库中,我想搜索某个星期数的所有结果。 有什么区别/更有效:
使用函数索引:

CREATE INDEX week_number_index ON my_table (EXTRACT (WEEK FROM date));

:OR:
创建一个带有索引的新列,该索引存储每个条目的星期数。

2 个答案:

答案 0 :(得分:1)

与示例中相同的索引表达式是在插入时计算的。这意味着与新列上的索引相比,您会看到相同的搜索改进,但是却没有在新列上存储数据的开销和精力。 您的表情索引就是您要走的路。

资料来源:
https://devcenter.heroku.com/articles/postgresql-indexes#expression-indexes
https://www.postgresql.org/docs/8.1/indexes-expressional.html

答案 1 :(得分:0)

真正的区别在于您想要访问数据的方式。在这两种情况下,维护索引的开销都发生在insert / update / delete操作上。在这种情况下,用于计算该值的任何开销都是最小的。

如果要使用:

where EXTRACT(WEEK FROM date) = :x

然后使用功能索引。

如果要使用:

where date_week = :x

然后使用一列。

更重要的是,我认为在抽出一周时排除年份是个坏主意。我建议为每个索引使用date_trunc('week', date)