仓酷云

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

[学习教程] MYSQL编程:ORACLE SQL功能优化系列 (三)

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

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

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

x
用户时常会发现其实自己并不是第一个选用MySQL数据库的先驱者。”oracle|功能|优化


8.利用DECODE函数来削减处置工夫



利用DECODE函数能够制止反复扫描不异纪录或反复毗连不异的表.



比方:

SELECTCOUNT(*),SUM(SAL)

FROM EMP

WHEREDEPT_NO=0020

ANDENAMELIKE ‘SMITH%’;



SELECTCOUNT(*),SUM(SAL)

FROM EMP

WHEREDEPT_NO=0030

ANDENAMELIKE ‘SMITH%’;



你能够用DECODE函数高效地失掉不异了局



SELECTCOUNT(DECODE(DEPT_NO,0020,’X’,NULL))D0020_COUNT,

COUNT(DECODE(DEPT_NO,0030,’X’,NULL))D0030_COUNT,

SUM(DECODE(DEPT_NO,0020,SAL,NULL))D0020_SAL,

SUM(DECODE(DEPT_NO,0030,SAL,NULL))D0030_SAL

FROMEMPWHEREENAMELIKE‘SMITH%’;



相似的,DECODE函数也能够使用于GROUPBY和ORDERBY子句中.





9.整合复杂,有关联的数据库会见



假如你有几个复杂的数据库查询语句,你能够把它们整合到一个查询中(即便它们之间没有干系)

比方:



SELECTNAME

FROMEMP

WHEREEMP_NO=1234;



SELECTNAME

FROMDPT

WHEREDPT_NO=10;



SELECTNAME

FROMCAT

WHERECAT_TYPE=‘RD’;



下面的3个查询能够被兼并成一个:



SELECTE.NAME,D.NAME,C.NAME

FROMCATC,DPTD,EMPE,DUALX

WHERENVL(‘X’,X.DUMMY)=NVL(‘X’,E.ROWID(+))

ANDNVL(‘X’,X.DUMMY)=NVL(‘X’,D.ROWID(+))

ANDNVL(‘X’,X.DUMMY)=NVL(‘X’,C.ROWID(+))

ANDE.EMP_NO(+)=1234

ANDD.DEPT_NO(+)=10

ANDC.CAT_TYPE(+)=‘RD’;



(译者按:固然接纳这类办法,效力失掉进步,可是程序的可读性年夜年夜下降,以是读者仍是要衡量之间的利害)



10.删除反复纪录

最高效的删除反复纪录办法(由于利用了ROWID)



DELETEFROMEMPE

WHEREE.ROWID>(SELECTMIN(X.ROWID)

FROMEMPX

WHEREX.EMP_NO=E.EMP_NO);



11.用TRUNCATE替换DELETE

当删除表中的纪录时,在一般情形下,回滚段(rollbacksegments)用来寄存能够被恢复的信息.假如你没有COMMIT事件,ORACLE会将数据恢复到删除之前的形态(正确地说是

恢复到实行删除命令之前的情况)



而当使用TRUNCATE时,回滚段不再寄存任何可被恢复的信息.当命令运转后,数据不克不及被恢复.因而很少的资本被挪用,实行工夫也会很短.



(译者按:TRUNCATE只在删除全表合用,TRUNCATE是DDL不是DML)





12.只管多利用COMMIT



只需有大概,在程序中只管多利用COMMIT,如许程序的功能失掉进步,需求也会由于COMMIT所开释的资本而削减:

COMMIT所开释的资本:

a.回滚段上用于恢单数据的信息.

b.被程序语句取得的锁

c.redologbuffer中的空间

d.ORACLE为办理上述3种资本中的外部消费



(译者按:在利用COMMIT时必需要注重到事件的完全性,实际中效力和事件完全性常常是鱼和熊掌不成得兼)
MySQL已经为支持所有最流行的Web2.0语言做好了准备,诸如Ruby、Ajax等,当然还有PHP。有的业界分析师说过,“每一个Web2.0公司实质上就是一个数据库公司。
老尸 该用户已被删除
沙发
发表于 2015-1-19 20:00:06 | 只看该作者
光写几个SQL实在叫无知。
若相依 该用户已被删除
板凳
发表于 2015-1-26 16:07:52 | 只看该作者
入门没那么困难,精通没那么容易
深爱那片海 该用户已被删除
地板
发表于 2015-2-4 17:08:57 | 只看该作者
发几份SQL课件,以飨阅者
小女巫 该用户已被删除
5#
发表于 2015-2-10 04:30:01 | 只看该作者
入门没那么困难,精通没那么容易
乐观 该用户已被删除
6#
发表于 2015-2-28 19:46:22 | 只看该作者
代替了原来VB式的错误判断。比Oracle高级不少。
再见西城 该用户已被删除
7#
发表于 2015-3-17 05:10:10 | 只看该作者
SQL语言是学习所有数据库产品的基础,无论你是做数据库管理还是做数据库开发都是这样。不过具体学习的侧重点要看你将来做哪一块,如果是做数据库管理(DBA),侧重点应该放在SQLServer的系统管理上.
蒙在股里 该用户已被删除
8#
发表于 2015-3-23 21:48:55 | 只看该作者
比如日志传送、比如集群。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-22 21:26

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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