oracle中视图、序列、同义词、索引
1.视图 视图是一种数据库对象,是从一个或者多个数据表或视图中导出的虚表,视 图所对应的数据并不真正地存储在视图中,而是存储在所引用的数据表中,视图 的结构和数据是对数据表进行查询的结果。 视图相当于一条sql语句的封装,每次访问时,都会执行sql语句 使用视图的优点: 简化数据操作:视图可以简化用户处理数据的方式。简化sql语句操作 创建格式: CREATE [OR REPLACE] [FORCE] VIEW view_name AS subquery [WITH CHECK OPTION ] [WITH READ ONLY] OR REPLACE :若所创建的试图已经存在,ORACLE 自动重建该视图; FORCE :不管基表是否存在 ORACLE 都会自动创建该视图; subquery :一条完整的 SELECT 语句,可以在该语句中定义别名; WITH CHECK OPTION :插入或修改的数据行必须满足视图定义的约束; WITH READ ONLY :该视图上不能进行任何 DML 操作。 基表:创建视图的原始表 删除视图: DROP VIEW view_name 复杂视图中的键保留表:基表中的主键在视图中依然可以作为主键,则此主键所在的基表就称为键保留表,修改视图中数据时,只能修改键保留表中的值 原因:对视图的修改,实际上是对基表中的数据进行修改,如果不是键保留表中的字段,则无法定位,故不可修改 2.物化视图 //提高查询效率 物化视图与普通的视图相比的区别是物化视图是建立的副本,它类似于一张物理 表,需要占用存储空间。而对一个物化视图查询的执行效率与查询一个表是一样 的。 创建格式: CREATE MATERIALIZED VIEW view_name [BUILD IMMEDIATE | BUILD DEFERRED ] //生成数据的时间 REFRESH [FAST|COMPLETE|FORCE] //刷新的方式 [ ON [COMMIT |DEMAND ] | START WITH (start_time) NEXT //刷新的时机 (next_time) ] AS subquery BUILD IMMEDIATE 是在创建物化视图的时候就生成数据(默认) BUILD DEFERRED 则在创建时不生成数据,以后根据需要再生成数据。 refresh: fast: 采用增量刷新,只刷新自上次刷新以后进行的修改 commplete: 对整个物化视图进行完全的刷新 force: 刷新时会去判断是否可以进行快速刷新,如果可以则采用 FAST 方式,否则采用 COMPLETE(默认方式) on commit 指在基表发生 COMMIT 操作时自动刷新 on demmand 手动刷新,需要运行以下语句才能提交: begin DBMS_MVIEW.refresh('MV_ADDRESS','C'); end; 实际上是系统内置的存储过程 当刷新设置为增量刷新fast时, 1.需要创建物化视图日志: create materialized view log on t_address with rowid; 2.在查询语句中,必须包含所有表的rowid 3.序列 //产生连续的值,常用于主键自动生长 序列是 ORACLE 提供的用于产生一系列唯一数字的数据库对象 create sequence 序列名称 //创建序列 select 序列名称.nextval from dual //获取序列中下一个数 select 序列名称.currval from dual //获取序列当前数 create sequence 序列名 [INCREMENT BY n] //每次递增的值 [START WITH n] //开始的值 [{MAXVALUE n | NOMAXVALUE}] //最大值 [{MINVALUE n | NOMINVALUE}] //最小值 [{CYCLE | NOCYCLE}] //是否循环 [{CACHE n | NOCACHE}] //分配并存入内存中的个数,缓存的个数cache:电脑高速缓冲存储器 注意: 开始值不能比最小值小 每次递增的值必须小于等于最大值减最小值 如果是循环,必须指定最大值,且必须满足:最大值>最小值+(每次递增的值*缓存的个数) 修改序列: ALTER SEQUENCE 序列名称 MAXVALUE 5000 CYCLE; //start with开始值不能修改 删除序列: DROP SEQUENCE 序列名称; 4.同义词 同义词实质上是指定方案对象的一个别名。 create [public] SYNONYM synooym for object; //加public表示公有,当其他用户登录后也可直接通过此别名访问对应对象 drop synonym 要删除的同义词 //删除同义词 4.索引 //提高查询效率 索引是用于加速数据存取的数据对象,提高查询效率 索引是需要占据存储空间的,也可以理解为是一种特殊的数据。形式类似于一棵“树”,而树的节点存储的就是每条记录的物理地址,也就是我们提到的伪列(ROWID) create index 索引名称 on 表名(列名); //创建普通索引 create unique index 索引名称 on 表名(列名); //当这一列不会有重复的值的时候,可以设置唯一索引,设置完唯一索引相当于设置了唯一约束 create index 索引名称 on 表名(列名,列名.....); //复合索引,当需要经常使用几个列进行查询的时候,可以为这几列设置复合索引。 使用这几列查询时,where后面条件的顺序,必须和设置索引的顺序一致,否则和普通查询一样。 create index 索引名称 on 表名(列名) reverse; //当某个字段的值为连续增长的值,如果构建标准索引,会形成歪脖子树。这样会增加查询的层数,性能会下降。 建立反向键索引,可以使索引的值变得不规则,从而使索引树能够均匀分布 create bitmap index 索引名称 on 表名(列名); //位图索引适合创建在低基数列上
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构