本章不是技术性的话题,而是针对“很长很复杂的SELECT文”的一些说明和解释。
为打到我们复杂的查询目的,Oracle提供了丰富的语法,
我么在写SQL的时候,有的时候写了又长又复杂又的SELECT语句,反复会出问题:
・如果一个SELECT语句里实现了很多的需求,变得特别复杂的话,修改很痛苦。
如果我们后边维护的时候需要修改查询条件,就很麻烦。
・其次,随着时间的推移数据量也会不停地增加,经常会发生性能恶化的问题。
复杂SELECT文性能调优也变得很困难。
复杂的SELECT大概发生在如下3种情况:
首先是数据库设计合理:
如果数据库设计不合理,例如表和表的关联不明确,如果主外键的不是简单的结合关系,导致的查询就会变得复杂。
其次,程序员没有性能意识。
SELECT文并仅仅想通常的程序语言那样书写,也要注意性能。
因此,不仅仅要关注语法是否正确,要从性能角度吧复杂冗长的SELECT文写好,也很重要。这也是我们程序技巧的体现。
其次,是简单地复制粘贴其他的程序。
例如,SELECT语句不是从零开始写的,而是从其他程序里正确的SELECT语句复制过来的,
然后把该SELECT作为子查询使用,也没理解原来SQL的语义。
这样就会使SQL变得越来越复杂。
以上3个例子说明了找出复杂SQL的情况。
所以我们要尽量避免以上三种情况。
如果需要一个长而复杂的SELECT语句才能实现我们的需求的话,我们改用用PL/SQL语言块来实现,
里边的SELECT语句简单,这样就能设计出符合要求的程序,发生性能的可能性也会大大减少。
例如:PL/SQL语言与SQL语言不同,是对单纯的SQL语句以及SQL结果进行简单地逻辑处理的。
是不需要用一个大而复杂的SELECT句子来完成处理的,而是将它分解成一个一个的步骤来满足这一个复杂的SELECT语句
实现的逻辑的。一般一个SELECT语句都是简单的。
当然,SELECT语句的数量会有所增加,但是比起执行一个性能差的大的SELECT语句,出现问题的可能性,
或者出现问题无法下手解决的问题,或者甚至性能问题无法解决,都会变得容易的很多。
所以尽量多用PL/SQL,而避免使用复杂的SQL文
本章到此为止。