Oracle存储过程执行慢,多一个约束比少一个约束条件快N倍 求解:存储过程动态拼接的SQL,有红色部分时,存储过程查询需要0.2S,没有时需要19S,而直接执行SQL有红色部分时是0.14S,没有红色部分时是1.4S……为什么SQL反而更快,怎么使存储过程查询没有红色部分时查询更快? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这只是测试的时候用的呀,又不一定只有一个元素,我知道你还会说用exisits,但我现在说的是没有这个条件时慢 红色部分是不是建了索引,SQL运行是先从where条件开始过滤条件 这和where条件的执行顺序有关。ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接尽量写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件尽量写在WHERE子句的末尾。 那确实,exist后面是权限管理拼了出来的语句(给一个用户授权看他能查询哪些产品出来) 这个得看赋给的权限了,exist后面是权限管理拼了出来的语句(给一个用户授权看他能查询哪些产品出来),红色部分是产品种类,所以…… 这个得看赋给的权限了,exist后面是权限管理拼了出来的语句(给一个用户授权看他能查询哪些产品出来),红色部分是产品种类,所以……可能是我说的不清楚,首先我是说,你添加了 in (203) 之后,会过滤掉很大一部分数据,参与join的数据量变小,所以会比之前快很多。其次,从优化角度,有几点建议你可以考虑一下:(1)列查询语句考虑是否可以用decode替代;(2)考虑exists是否可以用表连接替代;(3)如果表中数据量差别很大,建议将大表放在小表之前(这是因为from的从右向左解析规则); 这个得看赋给的权限了,exist后面是权限管理拼了出来的语句(给一个用户授权看他能查询哪些产品出来),红色部分是产品种类,所以……可能是我说的不清楚,首先我是说,你添加了 in (203) 之后,会过滤掉很大一部分数据,参与join的数据量变小,所以会比之前快很多。其次,从优化角度,有几点建议你可以考虑一下:(1)列查询语句考虑是否可以用decode替代;(2)考虑exists是否可以用表连接替代;(3)如果表中数据量差别很大,建议将大表放在小表之前(这是因为from的从右向左解析规则);这个得看赋给的权限了,exist后面是权限管理拼了出来的语句(给一个用户授权看他能查询哪些产品出来),红色部分是产品种类,所以……可能是我说的不清楚,首先我是说,你添加了 in (203) 之后,会过滤掉很大一部分数据,参与join的数据量变小,所以会比之前快很多。其次,从优化角度,有几点建议你可以考虑一下:(1)列查询语句考虑是否可以用decode替代;(2)考虑exists是否可以用表连接替代;(3)如果表中数据量差别很大,建议将大表放在小表之前(这是因为from的从右向左解析规则);谢谢大神,已经全面修改原来的权限拼接的方法,改在了表连接了其实我内心是拒绝的,这是 一个完成的上线的项目,这一刀下去,要测好久了,都不知道有哪些位子用了这……蛋蛋疼 数据更新问题 在mysql5.0中写触发器,将数据同步到oracle10中 oracle 什么是数据仓库 oracle数据库创建失败 请教一下大家,这个SQL语句怎么写??? 我的一个oracle数据库 一天死一次!!! maximum open cursors exceeded 在查询ORALCE记录时,如何检查记录已经被另一用户锁定???? 我的oracle问题,求高手解答在线高分求助!!!!! 请教一个语句 64位window中通过excel创建连接oracle的数据源报错 Oracle 11G 'impdb' 不是内部或外部命令,也不是可运行的程序
这个得看赋给的权限了,exist后面是权限管理拼了出来的语句(给一个用户授权看他能查询哪些产品出来),红色部分是产品种类,所以……
这个得看赋给的权限了,exist后面是权限管理拼了出来的语句(给一个用户授权看他能查询哪些产品出来),红色部分是产品种类,所以……
可能是我说的不清楚,首先我是说,你添加了 in (203) 之后,会过滤掉很大一部分数据,参与join的数据量变小,所以会比之前快很多。其次,从优化角度,有几点建议你可以考虑一下:
(1)列查询语句考虑是否可以用decode替代;
(2)考虑exists是否可以用表连接替代;
(3)如果表中数据量差别很大,建议将大表放在小表之前(这是因为from的从右向左解析规则);
这个得看赋给的权限了,exist后面是权限管理拼了出来的语句(给一个用户授权看他能查询哪些产品出来),红色部分是产品种类,所以……
可能是我说的不清楚,首先我是说,你添加了 in (203) 之后,会过滤掉很大一部分数据,参与join的数据量变小,所以会比之前快很多。其次,从优化角度,有几点建议你可以考虑一下:
(1)列查询语句考虑是否可以用decode替代;
(2)考虑exists是否可以用表连接替代;
(3)如果表中数据量差别很大,建议将大表放在小表之前(这是因为from的从右向左解析规则);
这个得看赋给的权限了,exist后面是权限管理拼了出来的语句(给一个用户授权看他能查询哪些产品出来),红色部分是产品种类,所以……
可能是我说的不清楚,首先我是说,你添加了 in (203) 之后,会过滤掉很大一部分数据,参与join的数据量变小,所以会比之前快很多。其次,从优化角度,有几点建议你可以考虑一下:
(1)列查询语句考虑是否可以用decode替代;
(2)考虑exists是否可以用表连接替代;
(3)如果表中数据量差别很大,建议将大表放在小表之前(这是因为from的从右向左解析规则);谢谢大神,已经全面修改原来的权限拼接的方法,改在了表连接了其实我内心是拒绝的,这是 一个完成的上线的项目,这一刀下去,要测好久了,都不知道有哪些位子用了这……蛋蛋疼