|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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公司实质上就是一个数据库公司。 |
|