【发布时间】:2019-12-26 11:00:01
【问题描述】:
我有一个 100+ 百万行的 oracle MV。我们的大部分代码都针对这个视图调用,所以我想保持语法完整并确保这些调用非常快。
由于业务逻辑,我知道不到 100 万行就足以回答 99% 以上的所有呼叫。假设这百万行在分区 1 中。我想知道:
- Oracle 是否(可能)自行发现并通常返回缓存结果而不是实际扫描表?
- 我是否可以告诉 Oracle 始终先检查第一个分区,然后按喜欢的方式继续。
- 我还能做些什么吗?
如果 (1) 是这种情况,那么我想我们已经尽可能快了。 否则我怎么能让(2)工作?还是有什么 (3) 是我还没想到的?
你能帮忙吗? 你好, 彼得
【问题讨论】:
-
是否有一个通用键可以标识这些“100 万行”?如果是这样,这就是您的分区依据,Oracle 将足够聪明地找出答案。
-
@APC;基本上是的。但是现在我们还没有按这个键进行分区。所以我想这就是我们接下来要做的。
-
@APC:只是为了仔细检查:键是按一些“日期值”排序的,这足以确保所有重要的行都在分区 1 中。但大多数选择不会要求这样做日期值。 oracle 是否仍然足够聪明,可以先检查分区 1?
-
不太可能。通常,分区修剪(仅搜索 Oracle 知道具有所有必需记录的分区)仅适用于使用分区键的查询。可能如果您有与日期绝对相关的东西并且您收集直方图统计信息,那么 Oracle 可能能够建立相关性并仍然查看一个分区。但我不能确定,因为我只使用过其键始终是查询一部分的分区(我过着多么狭窄的生活)。
-
所有这些 (99.9%) 查询都使用相同或相似的 WHERE 子句吗?你怎么知道他们能满足这个子集?你能写一个可靠地识别所有这些记录的查询吗?
标签: oracle performance caching query-optimization large-data-volumes