如何通过索引搜索日期列,而不是通过过滤器?

时间:2016-04-18 15:17:40

标签: database postgresql indexing query-optimization

三是日期列,oscar_alpha是整数。

我有来自Postgres的result 解释。在16行我想阻止访问表以在过滤条件中找到

Filter: ((three >= '15.04.2010 00:00'::date) AND (three <= '15.04.2016 00:00'::date) AND (oscar_alpha = 341)).

我想通过索引检查这个条件。 我创建了索引:

create index index1 on table_name (three , oscar_alpha);
create index index2 on table_name (three);
create index index3 on table_name (oscar_alpha);

但他们没有使用。

是的,有些数据是匿名的。

1 个答案:

答案 0 :(得分:1)

您需要按此顺序在(oscar_alpha, three)上创建复合索引。

索引按字典顺序排序,首先是第一列的值,然后是相等的,在第二列等,如电话簿:首先是姓氏,然后是姓名。

很容易从电话簿中将所有史密斯从约翰送到玛丽,但从琼斯到史密斯的所有约翰都不容易,因为这些条目首先按姓氏订购。

与您的查询相同:如果您首先在oscar_alpha订购,则所有具有相同oscar_alpha的值都会按three顺序排列,并且可以应用范围条件他们。