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

相关推荐
武帝为此7 小时前
【MyBatis Plus 逻辑删除详解】
数据库·oracle·mybatis
JeffreyGu.10 小时前
Oracle中In和Exists区别分析
数据库·oracle
SuperherRo11 小时前
Web开发-PHP应用&文件操作安全&上传下载&任意读取删除&目录遍历&文件包含
php·上传·删除·遍历·下载·读取·包含
宝耶20 小时前
MySQL基础语句
数据库·mysql·oracle
这我可不懂1 天前
有必要使用 Oracle 向量数据库吗?
oracle
黑风风1 天前
记一次Spring Boot应用中数据库连接阻塞问题排查过程
数据库·spring boot·oracle
coder_wwwdy1 天前
【Java项目】基于JSP的幼儿教育管理系统
java·开发语言·oracle
补三补四2 天前
Yashan DB 实例管理
数据库·oracle
珹洺2 天前
数据库系统概论(三)数据库系统的三级模式结构
java·运维·服务器·数据库·oracle
deadknight92 天前
表、索引统计信息锁定和解锁
数据库·oracle