数据库开发常识(10.6)——考量使用多视图连接、循环删除、绑定变量、连接表数及触发器(2)

10.6. 数据库开发常识

10.6.3. 慎用多视图连接

涉及多个对象连接的SQL语句,尽量不要用视图,严禁视图嵌套视图,尤其是有大数据量表参与其中的场景,具体场景如下所示。

create view v1 as select ...where;

create view v2 as select ... from tab2,tab3,v1 where ...;

select ... from tab1,v1,v2 where ...;

--注:

1)为什么要"慎用多视图连接"?为什么"严禁视图嵌套视图"?又为什么"尤其是有大数据量表参与其中的场景"?

10.6.4. 慎用循环Delete

Delete语句,尽量不要出现在loop内,除非相关表数据量巨大(大于500w,当然这不是绝对的)。否则,最好通过一次delete完成,不要在loop结构内循环多次完成。对于数据量巨大表的delete操作,也可以考虑将表分区,再通过对分区的drop或truncate完成相关数据的清除。2014年,本人就曾在给某行业机构的系统做性能分析和诊断时发现了类似的模块,当时该模块消耗了大量的系统资源,并且,该模块已导致相关系统出现了严重的性能问题。具体场景如下所示。

while ... loop

delete from tab1

where col1=...

...

and rownum<=500;

end loop;

--注:

1)大家思考下,在什么场景下,这种循环delete方式最容易导致严重的性能问题?而又在什么场景下,其不会导致严重的性能问题?

10.6.5. 考量绑定变量的应用

Oracle 10g及以下的版本,绑定变量的使用要注意,尤其是在数据分布倾斜严重的列上使用绑定变量时,需要谨慎的权衡绑定变量带来的利益和可能发生的诸多问题。绑定变量的SQL语句具体如下所示。

select * from tab_sales

where pro_no=:v_bind;

--注:

1)大家思考下,"在数据分布倾斜严重的列上使用绑定变量时",为什么Oracle 10g及以下版本上会出现性能问题?Oracle 11g不会出现问题吗?

10.6.6. 减少参与连接的表数

尽量减少参与连接的表数目。因为默认情况下,参与连接的表越多,执行计划跑偏的几率就越大,这在有大数据量表参与时,可能会导致严重的性能问题。较多表参与连接的SQL语句具体如下所示。

select ...from tab_1,tab_2,tab_3,...,tab10

where ...;

--注:

1)为什么参与连接的表越多,执行计划跑偏的几率越大?

10.6.7. 慎用触发器

涉及大数据量相关业务时,尤其是在频繁操作的大数据量表上,表上的触发器可能会导致系统局部或整体的性能问题,继而引发其他更严重的系统性故障。因此,这种大数据量业务场景,尽量不要用触发器。

此外,非大数据量业务场景中,因为触发器的逻辑级联等因素,也可能会引发一系列连锁问题和故障的发生,同时,这种问题分析、排查和解决起来又比较隐蔽和麻烦,因此,出于数据库性能、稳定性、可用性、管理和维护的考虑,也要慎用触发器。

2013年,本人就曾帮助某行业机构成功排查和解决了触发器引发的一起严重的数据库性能故障。故障排查前,数据库服务器IBM某型小机CPU资源使用率持续冲顶,导致数据库性能问题和应用系统异常;触发器相关故障排除后,数据库服务器CPU资源使用率在10%上下徘徊,系统性能和应用系统恢复正常。

--注:

1)我们回忆下什么是触发器及触发器的种类。另外,思考下,触发器能给我们带来什么好处和问题?

2)为什么在大数据量业务里及操作频繁的表上,尽量不要用触发器?

3)什么是触发器的逻辑级联?其是如何引起的?

相关推荐
ClouGence3 天前
Oracle CDC 架构优化:从主库直连到 DataGuard 备库同步
数据库·后端·oracle
曹牧3 天前
Oracle EXPLAIN PLAN
数据库·oracle
贤时间3 天前
codex 助力oracle ebs 开发
数据库·oracle
秉承初心3 天前
PostgreSQL 数据性能瓶颈突破实战
数据库·postgresql·oracle
Curvatureflight4 天前
MySQL 深分页越来越慢?从 LIMIT OFFSET 改成游标分页
数据库·oracle
XZ-0700014 天前
MySQL事务
数据库·mysql·oracle
tiancaijiben4 天前
阿里云函数计算FC如何实现网站的定时任务与自动化
数据库·oracle·dba
xfhuangfu4 天前
Oracle 19c 多租户体系架构介绍
数据库·oracle·架构
杨云龙UP4 天前
Spotlight 接入 Oracle 数据库监控操作指南 2026-06-16
数据库·oracle·性能监控·预警·阈值·spotlight·瓶颈分析
unique4 天前
AI Coding 采集方案探索
jvm·人工智能·oracle