gpt4 book ai didi

sql - 需要帮助调整 sql 查询

转载 作者:行者123 更新时间:2023-12-04 22:52:28 24 4
gpt4 key购买 nike

我需要一些帮助来提升这个 SQL 语句。执行时间约为125ms。
在我的程序运行时这个 sql(更好:不同表的结构相同的 sql)
将被调用 300.000 次。

表中的平均行数约为 10.000.000 行,每天将添加带有时间戳的新行(更新/插入)。对这个特定导出计划感兴趣的数据是过去 1-3 天的数据。也许这有助于创建索引。我需要的数据是给定 id 的当前有效行和获取更新的先行者数据行(如果存在)。

我们使用 Oracle 11g 数据库和 Dot.Net Framework 3.5

要提升的 SQL 语句:

select 
ID_SOMETHING, -- Number(12)
ID_CONTRIBUTOR, -- Char(4 Byte)
DATE_VALID_FROM, -- DATE
DATE_VALID_TO -- DATE

from
TBL_SOMETHING XID

where
ID_SOMETHING = :ID_SOMETHING
and ID_CONTRIBUTOR = :ID_CONTRIBUTOR
and DATE_VALID_FROM <= :EXPORT_DATE
and DATE_VALID_TO >= :EXPORT_DATE

order by
DATE_VALID_FROM asc;

这里我上传了当前 Explain-Plan对于这个查询。

我不是数据库专家,所以我不知道哪种索引类型最适合此要求。
我已经看到可以应用许多不同的可能索引类型。
也许 Oracle Optimizer Hints 也有帮助。

有没有人有调整这个 sql 的好主意,或者可以指出我正确的方向?

最佳答案

解释计划看起来尽可能好,但这并不一定意味着什么。
Quassnoi 提出的指数也正是我要提出的。

无论如何,在你的程序中做 300000 次类似的查询让我问:这有必要吗?也许你可以用更少的查询达到同样的目标,每个查询做的多一点。

如果你不能避免做这么多查询,你至少应该使用准备好的语句。如果您使用 LINQ,那就是为您编译的语句。通过这种方式,您可以避免解析开销,这可能是整个支出的很大一部分,尤其是对于此类简单查询。

关于sql - 需要帮助调整 sql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2514612/

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