gpt4 book ai didi

sql - 优化 Oracle Between Date 语句

转载 作者:行者123 更新时间:2023-12-01 17:26:23 24 4
gpt4 key购买 nike

我有一个 Oracle SQL 查询,它选择当天的条目,如下所示:

SELECT   [fields] 
FROM MY_TABLE T
WHERE T.EVT_END BETWEEN TRUNC(SYSDATE)
AND TRUNC(SYSDATE) + 86399/86400
AND T.TYPE = 123

EVT_END 字段的类型为 DATE,而 T.TYPENUMBER(15,0) >.

我确信随着表数据大小(以及持续时间)的增加,日期约束将比类型约束以更大的因子减少结果集。 (因为类型数量非常有限)

因此出现的基本问题是,选择什么索引才能使当前日期的选择更快。我特别想知道 TRUNC(T.EVT_END) 上的功能索引与 T.EVT_END 上的普通索引有何优缺点。当使用函数索引时,查询将如下所示:

SELECT   [fields] 
FROM MY_TABLE T
WHERE TRUNC(T.EVT_END) = TRUNC(SYSDATE)
AND T.TYPE = 123

因为其他查询使用提到的日期约束而没有额外的类型选择(或者可能使用一些其他字段),所以多列索引对我没有太大帮助。

谢谢,非常感谢您的提示。

最佳答案

您的索引应为 TYPE, EVT_END。

CREATE INDEX PIndex
ON MY_TABLE (TYPE, EVT_END)

优化器计划将首先通过该索引来查找 TYPE=123 部分。然后在 TYPE=123 下,它将对 EVT_END 时间戳进行排序,因此它可以在 b 树中搜索范围内的第一个日期,并按顺序遍历日期,直到数据超出范围。

关于sql - 优化 Oracle Between Date 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13494596/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com