数据库开发常识(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)什么是触发器的逻辑级联?其是如何引起的?

相关推荐
leegong231113 小时前
oracle大师认证证书有用吗
数据库·oracle
betazhou4 小时前
基于Oracle ADG通过dblink创建物化视图同步数据到目标库
数据库·oracle·view·视图·物化视图·materialized
计算机毕设定制辅导-无忧学长4 小时前
TDengine 可靠性保障:数据持久化与容灾备份(二)
数据库·oracle·tdengine
Arbori_2621518 小时前
oracle COUNT(1) 和 COUNT(*)
数据库·oracle
hxung21 小时前
MySQL与Oracle深度对比
数据库·mysql·oracle
小小不董1 天前
Oracle OCP认证考试考点详解083系列03
运维·服务器·数据库·oracle·dba
不辉放弃1 天前
SQL 外键(Foreign Key)详细讲解
数据库·sql·oracle
Arbori_262151 天前
Oracle 排除交集数据 MINUS
数据库·oracle
莳花微语2 天前
记录一次因ASM磁盘组空间不足,导致MAP进程无法启动
数据库·oracle
永恒_顺其自然2 天前
Oracle 复制表结构(含索引、主键)操作指南
数据库·oracle