浅谈物化视图

物化视图作为sql调优的一种手段广泛用在数据仓库环境下,在我们的网站中,前台的访问类似OLTP系统,因而只要考虑和解决并发的问题,尽量的保证共享池中的库缓存

  物化视图作为sql调优的一种手段广泛用在数据仓库环境下,香港服务器租用,在我们的网站中,前台的访问类似oltp系统,因而只要考虑和解决并发的问题,尽量的保证共享池中的库缓存和数据库字典缓存的命中率,但后台的操作则类似于dss系统,大量的长查询语句,处理的不好,就会引起严重的i/o问题,下面这个sql语句就在后台执行了4432秒后报ora-01555快照太旧错误,因而想到用物化视图对个别语句进行优化下,据程序员描述,使用物化视图后,相同的语句基本在10秒内可以完成!

ORA-01555 caused by SQL statement below (SQL ID: 4rf1j4aw2mpkm, Query Duration=4432 sec, SCN: 0x0000.03cababb):

select d.id,d.subject,d.signinid,d.membership from (select c.*,rownum rownum_ from

(select a.id,a.subject,b.signinid,b.membership from b2b_a a,b2b_b b where

a.company_id=b.id and a.status=1 and a.deletetag=0 and a.subject is not null and

b.status=1 and regexp_like (b.signinid,’^[a-z0-9_-]+$’) order by a.id) c where

rownum1920290

 

由此可见,物化视图的威力,所以不得不好好学习下物化视图!那么为什么物化视图具备如此好的性能呢?
参考:,感谢作者分享!

物化视图可以用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果;
物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高查询性能;
物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL语句的正确性和有效性;
物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新;
物化视图还支持通过数据库链来做数据复制;

创建方式(Build Methods):包括BUILD IMMEDIATE和BUILD DEFERRED两种。BUILD IMMEDIATE是在创建物化视图的时候就生成数据,香港服务器租用,而BUILD DEFERRED则在创建时不生成数据,以后根据需要在生成数据。默认为BUILD IMMEDIATE;

查询重写(Query Rewrite):包括ENABLE QUERY REWRITE和DISABLE QUERY REWRITE两种。分别指出创建的物化视图是否支持查询重写。查询重写是指当对物化视图的基表进行查询时,Oracle会自动判断能否通过查询物化视图来得到结果,如果可以,则避免了聚集或连接操作,而直接从已经计算好的物化视图中读取数据。默认为DISABLE QUERY REWRITE;
关于查询重写的演示可参考:

刷新(Refresh):指当基表发生了DML操作后,物化视图何时采用哪种方式和基表进行同步。刷新的模式有两种:ON DEMAND和ON COMMIT。ON DEMAND指物化视图在用户需要的时候进行刷新,可以手工通过DBMS_MVIEW.REFRESH等方法来进行刷新,也可以通过JOB定时进行刷新。ON COMMIT指出物化视图在对基表的DML操作提交的同时进行刷新。刷新的方法有四种:FAST、COMPLETE、FORCE和NEVER。FAST刷新采用增量刷新,只刷新自上次刷新以后进行的修改。COMPLETE刷新对整个物化视图进行完全的刷新。如果选择FORCE方式,则Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采用COMPLETE的方式。NEVER指物化视图不进行任何刷新。默认值是FORCE ON DEMAND;

造好物 造好物

一站式AI造物设计平台

造好物 70 查看详情 造好物

在建立物化视图的时候可以指定ORDER BY语句,使生成的数据按照一定的顺序进行保存。不过这个语句不会写入物化视图的定义中,而且对以后的刷新也无效;

物化视图日志:如果需要进行快速刷新,则需要建立物化视图日志。物化视图日志根据不同物化视图的快速刷新的需要,可以建立为ROWID或PRIMARY KEY类型的。还可以选择是否包括SEQUENCE、INCLUDING NEW VALUES以及指定列的列表;

可以指明ON PREBUILD TABLE语句将物化视图建立在一个已经存在的表上。这种情况下,香港服务器,物化视图和表必须同名。当删除物化视图时,不会删除同名的表。这种物化视图的查询重写要求参数QUERY_REWRITE_INTEGERITY必须设置为trusted或者stale_tolerated;

物化视图可以进行分区。而且基于分区的物化视图可以支持分区变化跟踪(PCT)。具有这种特性的物化视图,当基表进行了分区维护操作后,仍然可以进行快速刷新操作。 对于聚集物化视图,可以在GROUP BY列表中使用CUBE或ROLLUP,来建立不同等级的聚集物化视图;

下面来演示下使用物化视图在数据库间对表进行复制
一:在源库上创建用户和基表 

二:在目标库上创建用户和物化视图

三:源库上查看物化视图日志信息

SNAPTIME$$:用于表示刷新时间
DMLTYPE$$:用于表示DML操作类型,I表示INSERT,D表示DELETE,U表示UPDATE
OLD_NEW$$:用于表示这个值是新值还是旧值。N(EW)表示新值,O(LD)表示旧值,U表示UPDATE操作
CHANGE_VECTOR$$表示修改矢量,用来表示被修改的是哪个或哪几个字段

如果WITH后面跟了ROWID,则物化视图日志中会包含:
M_ROW$$:用来存储发生变化的记录的ROWID

如果WITH后面跟了PRIMARY KEY,则物化视图日志中会包含主键列。

如果WITH后面跟了OBJECT ID,则物化视图日志中会包含:
SYS_NC_OID$:用来记录每个变化对象的对象ID

如果WITH后面跟了SEQUENCE,则物化视图日子中会包含:
SEQUENCE$$:给每个操作一个SEQUENCE号,从而保证刷新时按照顺序进行刷新。
如果WITH后面跟了一个或多个COLUMN名称,则物化视图日志中会包含这些列。

本文出自 “斩月” 博客,谢绝转载!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/529216.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月9日 09:40:33
下一篇 2025年11月9日 09:41:59

相关推荐

  • Golang测试代码生成 自动化生成测试用例

    自动化生成Golang测试用例的核心在于结合Fuzzing、反射和代码生成工具。Go内置Fuzzing能自动探索输入并发现崩溃,解决输入多样性问题;反射可用于自动生成复杂结构体的测试数据,提升数据准备效率;gopter等PBT库则通过定义代码属性验证逻辑正确性;而外部依赖模拟和“神谕问题”仍需人工设…

    2025年12月15日
    000
  • Golang的crypto库如何实现数据加密 演示AES和RSA最佳实践

    golang的crypto库为数据加密提供了坚实的基础,它不是一个单一的“加密”功能,而是一系列密码学原语的集合。在实际应用中,aes(高级加密标准)凭借其对称加密的高效性,成为处理大量数据的首选,尤其是在gcm模式下,它能同时提供数据的机密性、完整性和认证。而rsa(rivest-shamir-a…

    2025年12月15日 好文分享
    000
  • Golang如何优化加密运算 使用硬件加速指令提升AES性能

    要优化golang中的aes加密性能,关键在于利用硬件加速和高效模式。1. 使用标准库crypto/aes包,其已自动启用aes-ni指令;2. 确认cpu支持aes-ni;3. 采用gcm模式提升性能与安全性;4. 复用cipher实例避免重复初始化;5. 利用并发处理大数据块;6. 减少内存拷贝…

    2025年12月15日 好文分享
    000
  • Debian系统如何监控JSP应用的运行状态

    在Debian操作系统中,对JSP应用进行运行状态监控可以采用多种方式和相关工具。以下是一些常见的方法: 1. 利用SpringBoot内置的性能监控功能 如果JSP项目是基于SpringBoot构建的,可以使用其自带的性能监控组件。SpringBoot提供了一些基础的监控类,比如Performan…

    2025年12月15日
    000
  • Debian下sqlplus使用技巧有哪些

    在Debian操作系统中使用SQL*Plus时,掌握一些实用技巧可以显著提升操作效率和管理体验。以下是一些常用的技巧: 增强命令行操作:通过安装rlwrap工具来实现命令历史浏览和上下文切换功能。具体步骤如下: sudo apt-get install rlwrap echo “alias sqlp…

    2025年12月15日
    000
  • 如何在Debian中提高phpstorm的稳定性

    在Debian系统中增强PhpStorm的稳定性可通过以下几种方式实现: 维持软件更新: 定期将PhpStorm升级至最新版本,例如PhpStorm 2018.1版本包含了大量错误修正及功能优化。同时也要确保Debian系统的全面更新,这样可以有效规避潜在的兼容性冲突。 选择合适的JVM: PhpS…

    2025年12月15日
    000
  • 使用Go语言连接Oracle数据库时是否需要安装Oracle客户端?

    Go语言连接Oracle数据库:是否必须安装Oracle客户端? 在Go语言开发中连接Oracle数据库是常见需求。许多教程和示例都建议安装Oracle客户端,这在Windows桌面开发和Linux生产环境中可能带来配置上的差异和不便。那么,Go语言的Oracle数据库驱动程序能否绕过Oracle客…

    2025年12月15日
    000
  • 在Go语言中使用Oracle驱动是否需要安装Oracle客户端?

    Go语言连接Oracle数据库:是否需要Oracle客户端? 许多Go语言开发者在连接Oracle数据库时,都会纠结于是否需要安装Oracle客户端。网上的许多示例都依赖于Oracle客户端,这无疑增加了跨平台部署的复杂性(例如,开发环境为Windows,生产环境为Linux)。 那么,Go语言的O…

    2025年12月15日
    000
  • 在Go中使用Oracle数据库驱动是否需要安装Oracle客户端?

    Go语言连接Oracle数据库:Oracle客户端并非必需 在Go语言开发中连接Oracle数据库,开发者常面临一个关键问题:是否必须安装Oracle客户端?尤其在Windows开发环境与Linux生产环境切换时,这个问题显得尤为重要。 许多教程都包含安装Oracle客户端的步骤,这无疑增加了开发和…

    2025年12月15日
    000
  • python oracle数据库如何安装?

    首先安装Oracle Instant Client并配置环境变量,再通过pip install oracledb安装Python驱动,最后用代码测试连接;确保客户端版本与系统匹配,并正确设置PATH、LD_LIBRARY_PATH或DYLD_LIBRARY_PATH以避免常见错误。 要在Python…

    2025年12月14日
    000
  • python-oracledb 游标对象与数据库会话管理深度解析

    本文深入探讨 `python-oracledb` 库中游标对象(Cursor Object)及其变量(Cursor Variable)的工作原理与生命周期。我们将阐明 `cursor.var()` 创建的变量在 Python 客户端和 Oracle 数据库会话之间的关系,纠正关于其值持久性的常见误解…

    2025年12月14日
    000
  • SQLAlchemy 声明式模型中指定数据库表模式(Schema)的方法

    本文详细介绍了如何在使用 sqlalchemy 声明式 api 定义和创建数据库表时,指定表所属的数据库模式(schema)。通过在声明式模型类中利用 `__table_args__` 属性并设置 `schema` 参数,开发者可以精确控制表在数据库中的位置,从而避免默认的“public”模式,尤其…

    2025年12月14日
    000
  • python-oracledb 游标与绑定变量:连接管理与数据持久化解析

    本文深入探讨了 `python-oracledb` 中游标对象 (`cursor`) 和绑定变量 (`cursor.var()`) 的工作机制及其生命周期。我们将澄清绑定变量在客户端Python环境与服务端Oracle数据库会话之间的行为差异,特别是数据在连接断开与重连后是否保持的问题。文章还将提供…

    2025年12月14日
    000
  • 深入理解 python-oracledb 中的游标对象与变量绑定

    `python-oracledb` 的 `cursor.var()` 方法用于创建客户端绑定变量。这些变量是 Python 对象,其值在客户端内存中维护,并不会因数据库连接的关闭而自动丢失。只有当变量通过游标执行 SQL 语句时,其值才与数据库会话进行交互。理解这一客户端与服务器端的区别,对于正确管…

    2025年12月14日
    000
  • python-oracledb 游标对象详解:生命周期、绑定变量与连接管理

    本文深入探讨 `python-oracledb` 中游标对象(cursor)和绑定变量(bind variables)的工作机制。我们将阐明 `cursor.var()` 如何创建客户端 Python 对象以管理绑定变量,并解释数据库会话与游标的生命周期。通过示例代码,纠正关于连接关闭与重开后变量值…

    2025年12月14日
    000
  • SQLAlchemy声明式风格下如何指定数据库表模式

    本文详细阐述了如何在sqlalchemy的声明式风格中,为数据库表指定特定的schema。通过利用模型类中的`__table_args__`属性,开发者可以设置`schema`参数,从而控制表在postgresql等支持schema的数据库中的命名空间归属。这使得表能够被创建到指定的schema而非…

    2025年12月14日
    000
  • SQLAlchemy声明式模型中指定数据库表Schema的方法

    本文详细介绍了如何在sqlalchemy的声明式模型中为数据库表指定schema。通过在模型类中利用`__table_args__`属性,开发者可以轻松地将表关联到特定的数据库schema,从而更好地组织和管理数据库结构,尤其适用于支持schema的数据库如postgresql,并提供了完整的代码示…

    2025年12月14日
    000
  • 使用SQLAlchemy声明式ORM指定数据库表Schema的教程

    本文详细介绍了如何在sqlalchemy声明式orm中为数据库表指定特定的schema,而非使用数据库的默认schema。通过利用模型类中的`__table_args__`属性,并设置`schema`参数,开发者可以灵活地控制表在不同命名空间中的创建位置。文章将提供具体的代码示例和使用指南,并探讨此…

    2025年12月14日
    000
  • Python代码如何连接MySQL数据库 Python代码使用PyMySQL驱动的连接方法

    答案:PyMySQL是纯Python实现的MySQL驱动,安装简单、跨平台兼容性好,支持参数化查询和DictCursor返回字典结果,避免SQL注入并提升代码可读性;实际项目中应通过环境变量或配置文件管理数据库凭证以确保安全,并使用DBUtils等工具构建连接池提升高并发场景下的性能;处理大数据量时…

    2025年12月14日
    000
  • 使用pip管理和解决mysql-connector-python安装问题

    本教程详细介绍了如何使用pip安装python的mysql连接器mysql-connector-python。针对pip提示“requirement already satisfied”但仍需重新安装的情况,文章提供了手动清理现有包文件的方法,确保顺利完成安装过程,并避免常见的环境冲突问题,帮助开发…

    2025年12月14日
    000

发表回复

登录后才能评论
关注微信