仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 921|回复: 8
打印 上一主题 下一主题

[学习教程] MYSQL网站制作之ORACLE SQL功能优化系列 (五)

[复制链接]
飘飘悠悠 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:38:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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并非没有局限性。它们难以扩展,需要大量的资源来配置和维护,比如时间、硬件和人力。同样,它们往往遵循峰值性能模型,这就要求系统按照峰值容量来配置可用性,而不考虑典型的数据使用情况。
再见西城 该用户已被删除
沙发
发表于 2015-1-19 20:01:15 | 只看该作者
比如,MicrosoftSQLServer2008的某一个版本可以满足现在的这个业务的需要,而且价格还比Oracle11g要便宜,那么这一产品就是适合的。
乐观 该用户已被删除
板凳
发表于 2015-1-26 22:40:05 来自手机 | 只看该作者
但换公司用MSSQL2K感觉自己好像根本就不了解MSSQL。什么DTS触发器以前根本没用过。
简单生活 该用户已被删除
地板
发表于 2015-2-4 21:20:56 | 只看该作者
代替了原来VB式的错误判断。比Oracle高级不少。
5#
发表于 2015-2-10 13:00:55 | 只看该作者
如果我们从集合论(关系代数)的角度来看,一张数据库的表就是一组数据元的关系,而每个SQL语句会改变一种或数种关系,从而产生出新的数据元的关系(即产生新的表)。
小魔女 该用户已被删除
6#
发表于 2015-3-1 10:49:15 | 只看该作者
你觉得我的非分区索引无法对起子分区,你可以提醒我一下呀!没有任何的提醒,直接就变成了非分区表。不知道这算不算一个bug。大家也可以试试。
小妖女 该用户已被删除
7#
发表于 2015-3-10 16:14:09 | 只看该作者
其中最有名的应该是row_number了。这个终于解决了用临时表生成序列号的历史,而且SQLServer2005的row_number比Oracle的更先进。因为它把Orderby集成到了一起,不用像Oracle那样还要用子查询进行封装。
透明 该用户已被删除
8#
发表于 2015-3-17 08:44:09 | 只看该作者
数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。
若天明 该用户已被删除
9#
发表于 2015-3-24 04:20:26 | 只看该作者
在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 02:28

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表