【发布时间】:2018-01-07 07:57:06
【问题描述】:
我们有一个 6B 行表,在检索数据时给我们带来了挑战。
我们的查询在执行操作时会立即返回值...
SELECT * WHERE Event_Code = 102225120
这种即时结果正是我们所需要的。我们现在想要过滤以接收特定年份的值 - 但我们添加的那一刻......
AND EXTRACT(YEAR FROM PERFORMED_DATE_TIME) = 2017
...查询需要 10 多分钟才能开始返回任何值。
Another SO post 提到在提取多行而不是单个行时,索引不一定有助于日期查询。还有其他方法,例如使用 TRUNC 或 BETWEEN,或以 YYYY-MM-DD 格式指定日期时间进行比较。
值得注意的是,我们没有向数据库添加索引的选项,因为它是供应商的数据库。
如何添加日期过滤查询并让 Oracle 开始以最快的方式返回结果?
【问题讨论】:
-
we do not have the option to add indexes- 请您的 DBA 创建索引。如果 DBA 不愿意帮忙,那就问问你的老板。告诉他们你不需要索引,因为查询非常慢,而且它不必要地占用数据库资源,使整个系统变慢。 -
@krokodilko - 重点是数据库是“是供应商的数据库”:令人遗憾的是,未经授权的数据库架构更改会使供应商的支持合同失效,这是一个令人遗憾的常见情况.也就是说,出于许可原因,他们“没有选择权”。
-
60亿条记录是很多记录:这张表是分区的吗?
标签: sql oracle query-optimization