oracle 简单连接查询执行时间与实体化视图执行时间

dgsult0t  于 2022-11-22  发布在  Oracle
关注(0)|答案(1)|浏览(199)

我 正在 寻找 SQL ( ORACLE ) 的 性能 改进 基于 几 个 例子 , 我 试图 比较 两 个 表 之间 的 简单 连接 与 MatrializedView 相同 查询 之间 的 执行 时间 。
两者 执行 时间 几乎 相同 。
表 A 联接 表 B
伏/秒
创建 实体 化 视图 emp _ mv 按 需 立即 强制 刷新 构建 为 ( 查询 表 A 连接 表 B )
对于 1000 条 记录 , 两 个 SQL 都 运行 了 7 个 月 。
总计 , 表 A 中 有 14k 条 记录 , 表 B 中 有 50 条 记录 , 最终 输出 为 14k 条 记录
关于 查询 执行 的 性能 , 我 是否 遗漏 了 什么 ?

2uluyalo

2uluyalo1#

为什么您会期望相同的查询有不同的行为?
物化视图的好处可能会在以后体现出来,当您实际开始使用它所包含的数据时,因为您已经对它进行了 * 预处理 *,并为将来的使用做好了准备。(用连音)一遍又一遍,所花的时间大致相同(忽略缓存)。但是,如果将该查询的数据存储到示例化视图中(并对其进行适当的索引),则数据检索可能/应该更快。
这与创建不包含任何数据的 * 普通视图 *“相反”-它只是一个 * 存储查询 *,每次您从中选择数据时,它都会检索数据,并再次执行相同的连接。
实体化视图 * 包含数据 *,就像它是一个表一样。如果数据存储在通过数据库链接访问的表中,这会有很大帮助--这可能是,而且通常是缓慢的。但是,如果您创建一个实体化视图(在夜间/下班时间),如果表中的数据频繁更改,则不会有太大帮助,因为您还必须频繁刷新MV(通常是ON COMMIT),但是-如果表非常大,您有一个复杂的查询,那么刷新也可能需要一些(很多?)时间。

相关问题