优化SQL 尤其是NVL(‘X’,X.DUMMY) = NVL(‘X’,E.ROWID(+))这样的写法到底是什么意思 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 学习!‘X’代表什么东东?ROWID(+)是怎么的回事? to 楼主: 我实在看不出那条sql 语句效率能有多高... 明天要是有空我做个plan看看。 7. 减少访问数据库的次数当执行每条SQL语句时, ORACLE在内部执行了许多工作: 解析SQL语句, 估算索引的利用率, 绑定变量 , 读数据块等等. 由此可见, 减少访问数据库的次数 , 就能实际上减少ORACLE的工作量. 例如, 以下有三种方法可以检索出雇员号等于0342或0291的职员. 方法1 (最低效) SELECT EMP_NAME , SALARY , GRADE FROM EMP WHERE EMP_NO = 342; SELECT EMP_NAME , SALARY , GRADE FROM EMP WHERE EMP_NO = 291;方法2 (次低效) DECLARE CURSOR C1 (E_NO NUMBER) IS SELECT EMP_NAME,SALARY,GRADE FROM EMP WHERE EMP_NO = E_NO; BEGIN OPEN C1(342); FETCH C1 INTO …,..,.. ; OPEN C1(291); FETCH C1 INTO …,..,.. ; CLOSE C1; END;方法3 (高效) SELECT A.EMP_NAME , A.SALARY , A.GRADE, B.EMP_NAME , B.SALARY , B.GRADE FROM EMP A,EMP B WHERE A.EMP_NO = 342 AND B.EMP_NO = 291; 注意:在SQL*Plus , SQL*Forms和Pro*C中重新设置ARRAYSIZE参数, 可以增加每次数据库访问的检索数据量 ,建议值为200. 楼上兄弟还是没有说明NVL(‘X’,X.DUMMY) = NVL(‘X’,E.ROWID(+))的啊。 看看NVL的函数就知道了啊。'x' 没什么意思,就是一个字符串啊。你愿意的话就改称'y'好了。:) NVL(B1, B2) 如B1为空则返回B2,如B1不空则返回B1这回你明白了吧! to shahand(死磕):以下有三种方法可以检索出雇员号等于0342或0291的职员.-------------------------------------------------为什么不能这样写??难道这样效率也很低??SELECT EMP_NAME , SALARY , GRADEFROM EMPWHERE EMP_NO = 342 OR EMP_NO = 291;而且你提供的第三种查询方式获取的记录是横向的,很少见哟 NVL已经用的很熟了但NVL(‘X’,X.DUMMY) = NVL(‘X’,E.ROWID(+))无论什么时候都会返回X,这样写有什么意义。或者什么时候会返回X.DUMMY. EMP_NO,DPT_NO ,CAT_TYPE 不是主键?如果是的话不用那么繁吧 oracle插入问题 请问一个关于建表的问题 请教各位高手一个触发器的问题,谢谢 关于序列的问题 请教如何监视ORACLE索引的使用情况? 这个怎么做,请教各位啊~~~~~~~~~~ 关于分区里边再分区问题 紧急求助:如何安装下载好的Oracle 9i 企业版(3CD) 菜鸟提问: %ROWTYPE 怎么用啊? 请问:我用imp命令导入了一个数据库,可是进入图型界面后却看不到这个数据库? 怎样将含有LONG型字段的表的数据卸出来? 在Oracle8.05客户端用exp80导出数据?
明天要是有空我做个plan看看。
的啊。
以下有三种方法可以检索出雇员号等于0342或0291的职员.
-------------------------------------------------
为什么不能这样写??
难道这样效率也很低??
SELECT EMP_NAME , SALARY , GRADE
FROM EMP
WHERE EMP_NO = 342 OR EMP_NO = 291;而且你提供的第三种查询方式获取的记录是横向的,很少见哟
但NVL(‘X’,X.DUMMY) = NVL(‘X’,E.ROWID(+))
无论什么时候都会返回X,这样写有什么意义。
或者什么时候会返回X.DUMMY.
如果是的话不用那么繁吧