2 andy987650628 andy987650628 于 2016.01.13 20:43 提问

oracle sql查询语句优化

select moni.p_code,moni.department,moni.monitorserialno,moni.adminname,moni.buildingname from t_monitorroom moni where moni.p_code in
(select roleauth.monitorroomid from t_monitorroom_role_authority roleauth left join
t_monitorroom_user_role userrole on userrole.roleid=roleauth.roleid where userrole.userid='admin')
其中t_monitorroom这个表中有一万多条记录,t_monitorroom_role_authority这个表中是存的角色拥有的t_monitorroom中的权限。
查询需要9秒多钟,求高手支招优化。

5个回答

CSDNXIAOD
CSDNXIAOD   2016.01.13 20:45

SQL查询语句优化
sql查询语句优化
sql查询语句优化
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

guwei4037
guwei4037   Ds   Rxr 2016.01.13 20:52

1、用with as语句
2、用exists代替in

Evankaka
Evankaka   Ds   Rxr 2016.01.13 23:47

1.explain 语句。看下可以优化的,打开慢查询日志。2.in语句的查询最后都会被优化成exists的相关子查询。比路你的这个。比较好的方法是想办法搞成连接查询,实在不行也要保证是独立子查询。。。

Evankaka
Evankaka   Ds   Rxr 2016.01.14 08:41

select moni.p_code,moni.department,moni.monitorserialno,moni.adminname,moni.buildingname from t_monitorroom moni as a.
(select roleauth.monitorroomid from t_monitorroom_role_authority roleauth left join
t_monitorroom_user_role userrole on userrole.roleid=roleauth.roleid where userrole.userid='admin') as b
where a.moni.p_code = b.monitorroomid
这是改用了派生表的方式,运行下对比看看。还有可以看看索引使用情况

andy987650628
andy987650628 你这个语句没有正常结束。
大约 2 年之前 回复
kingkong74
kingkong74   2016.01.16 23:27

不用看执行计划就能优化的都是怎么做到的?!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Oracle SQL查询优化方法1
系统优化中很重要的方面是SQL语句的优化,对于海量数据,优质的SQL能够有效的提高系统的可用性。 总结的有点罗嗦,列个简单的目录啦~ 目录   第一部分 知识准备                            第二部分 常用sql用法和注意事项                                第三部分  sql优化总结     1.  sql
Oracle SQL语句优化【4】之使用SQL优化工具
SQL语句是对数据库进行操作的惟一途径,对数据库系统的性能起着决定性的作用。对于同一条件下的SQL语句写法有很多,其中一些写法往往对性能又有很大影响。但是每个人掌握SQL语言的水平不同,如何才能保证写出高性能的SQL呢?    针对这种情况,人工智能自动SQL优化工具应运而生。现在我就向大家介绍这样一款工具:SQL Tuning for SQL Server。 1. SQL Tuning
Oracle 查询优化的基本准则详解
Oracle 查询优化的基本准则详解 1:在进行多表关联时,多用 Where 语句把单个表的结果集最小化,多用聚合函数汇总结果集后再与其它表做关联,以使结果集数据量最小化 2:在两张表进行关联时,应考虑可否使用右连接。以提高查询速度 3:使用 where 而不是 having ,where是用于过滤行的,而having是用来过滤组的,因为行被分组后,having 才能过滤组,所以尽量用户
sql 查询语句优化
sql 查询语句优化sql 查询语句优化sql 查询语句优化sql 查询语句优化
Oracle SQL语句之常见优化方法总结
下面列举一些工作中常常会碰到的Oracle的SQL语句优化方法: 1、SQL语句尽量用大写的;  因为oracle总是先解析SQL语句,把小写的字母转换成大写的再执行。 2、使用表的别名:   当在SQL语句中连接多个表时, 尽量使用表的别名并把别名前缀于每个列上。这样一来, 就可以减少解析的时间并减少那些由列歧义引起的语法错误。 3、选择最有效率的表名顺序(只在基于规则的优化器(RB
SQL 优化之 oracle物化视图
     在这里,其实大多都是我摘抄的参考资料……    供自己学习和借鉴……   可惜的是 也看的很少……   塔里木物流系统实施快三个月了,灾难的生活也半年了……   目前最大的工作就是优化sql……   这次,北京派来个真正的dba……  学会了物化视图!感觉很方便…… oracle物化视图                               
Oracle常用SQL查询语句
Oracle常用SQL查询语句,Oracle常用SQL查询语句,Oracle常用SQL查询语句
oracle 语句提高查询效率的方法
oracle 语句提高查询效率的方法 1:.. where column in(select * from ... where ...); 2:... where exists (select 'X' from ...where ...); 第二种格式要远比第一种格式的效率高。在Oracle中可以几乎将所有的IN操作符子查询改写为使用EXISTS的子查询 使用EXISTS,Orac
如何查看Oracle执行计划,并通过执行计划优化SQL
http://blog.51cto.com/xiao1ang/1900950
Mysql常用30种SQL查询语句优化方法
1、应尽量避免在 where 子句中使用!=或 2、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 3、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中n