【问题标题】:How to search date column via index, not via filter?如何通过索引而不是过滤器搜索日期列?
【发布时间】:2016-08-10 10:24:37
【问题描述】:

三是日期列,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);

但他们没有使用。

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

【问题讨论】:

    标签: database postgresql indexing query-optimization


    【解决方案1】:

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

    索引按字典顺序排序,首先是第一列的值,然后是相等的,然后是第二列,以此类推,就像电话簿一样:先是姓氏,然后是名字。

    从电话簿中获取从 John 到 Mary 的所有 Smiths 很容易,但从 Jones 到 Smith 获取所有 Johns 并不容易,因为这些条目是按姓氏排序的。

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

    【讨论】:

    • 我在 (oscar_alpha, three) 上添加了一个复合索引,但它不起作用
    • @Usm:哦,我明白了。您想要在 quebec_seven, oscar_alpha, three 上的复合索引。
    • @Usm:不幸的是,如果不查看数据和查询,我无能为力。
    猜你喜欢
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-24
    相关资源
    最近更新 更多