在我的数据库中,我想搜索某个星期数的所有结果。
有什么区别/更有效:
使用函数索引:
CREATE INDEX week_number_index ON my_table (EXTRACT (WEEK FROM date));
:OR:
创建一个带有索引的新列,该索引存储每个条目的星期数。
答案 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)
。