马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
DBaaS解决方案既可以解决这些问题,又能为客户节约资金。相反作为解决方案提供商,采用DBaaS模式似乎就并不那么有吸引力了,因为与企业内部署软件的解决方案相比,DBaaS意味着更低的利润。oracle|功能|优化
17.利用表的别号(Alias)
当在SQL语句中毗连多个表时,请利用表的别号并把别号前缀于每一个Column上.如许一来,就能够削减剖析的工夫并削减那些由Column歧义引发的语法毛病.
(译者注:Column歧义指的是因为SQL中分歧的表具有不异的Column名,当SQL语句中呈现这个Column时,SQL剖析器没法判别这个Column的回属)
18.用EXISTS替换IN
在很多基于基本表的查询中,为了满意一个前提,常常必要对另外一个表举行连接.在这类情形下,利用EXISTS(或NOTEXISTS)一般将进步查询的效力.
低效:
SELECT*
FROMEMP(基本表)
WHEREEMPNO>0
ANDDEPTNOIN(SELECTDEPTNO
FROMDEPT
WHERELOC=‘MELB’)
高效:
SELECT*
FROMEMP(基本表)
WHEREEMPNO>0
ANDEXISTS(SELECT‘X’
FROMDEPT
WHEREDEPT.DEPTNO=EMP.DEPTNO
ANDLOC=‘MELB’)
(译者按:绝对来讲,用NOTEXISTS交换NOTIN将更明显地进步效力,下一节中将指出)
19.用NOTEXISTS替换NOTIN
在子查询中,NOTIN子句将实行一个外部的排序和兼并.不管在哪一种情形下,NOTIN都是最低效的(由于它对子查询中的表实行了一个全表遍历).为了不利用NOTIN,我们能够把它改写成外毗连(OuterJoins)或NOTEXISTS.
比方:
SELECT…
FROMEMP
WHEREDEPT_NONOTIN(SELECTDEPT_NO
FROMDEPT
WHEREDEPT_CAT=’A’);
为了进步效力.改写为:
(办法一:高效)
SELECT….
FROMEMPA,DEPTB
WHEREA.DEPT_NO=B.DEPT(+)
ANDB.DEPT_NOISNULL
ANDB.DEPT_CAT(+)=‘A’
(办法二:最高效)
SELECT….
FROMEMPE
WHERENOTEXISTS(SELECT‘X’
FROMDEPTD
WHERED.DEPT_NO=E.DEPT_NO
ANDDEPT_CAT=‘A’);
(待续)
RDBMS并非没有局限性。它们难以扩展,需要大量的资源来配置和维护,比如时间、硬件和人力。同样,它们往往遵循峰值性能模型,这就要求系统按照峰值容量来配置可用性,而不考虑典型的数据使用情况。 |