一条SQL语句变得巨慢的原因及其解决方法

2016-02-19 21:20 9 1 收藏

只要你有一台电脑或者手机,都能关注图老师为大家精心推荐的一条SQL语句变得巨慢的原因及其解决方法,手机电脑控们准备好了吗?一起看过来吧!

【 tulaoshi.com - 编程语言 】

  现象:一条SQL突然运行的特别慢。

select uidTable.column_value, first_name||' '
||last_name, company, job_title, upper(member_level),
upper(service_value)
from (select * from table(select cast(multiset
(select b from bbb)as Taaa) from dual)) uidTable,member
where uidTable.column_value = member.login_id(+)
and member.site='alibaba' and member.site='test';

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  出错原因:用户增加了一个条件member.site=test,造成连接的顺序变化了,原来的驱动表是uidTable(最多1024条记录),现在变成了member表做驱动(600W条)。所以这条语句变的巨慢。

  但是既然是外连接,为什么连接的顺序会改变呢?因为外连接的连接顺序不是由COST决定的,而是由连接的条件决定的。发现执行计划如下:
-------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost |
--------------------------------------------------------
| 0 | SELECT STATEMENT | | 1018 | 72278 | 8155 |
| 1 | NESTED LOOPS | | 1018 | 72278 | 8155 |
| 2 | VIEW | | 4072 | 69224 | 11 |
| 3 | COLLECTION ITERATOR SUBQUERY FETCH| | | | |
| 4 | TABLE ACCESS FULL | DUAL | 4072 | | 11 |
| 5 | TABLE ACCESS FULL | BBB | 41 | 287 | 2 |
| 6 | TABLE ACCESS BY INDEX ROWID | MEMBER | 1 | 54 | 2 |
|* 7 | INDEX UNIQUE SCAN | MEMBER_SITE_LID_PK | 4 | | 1 |
-------------------------------------------------
 
  为什么根本就没有执行外连接呢?问题出在member.site='test'这个条件上,因为对外连接的表加了条件,造成外连接失效。改为member.site(+)='test'后,问题彻底解决。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

---------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost |
-----------------------------------------------------
| 0 | SELECT STATEMENT | | 1018 | 72278 | 8155 |
| 1 | NESTED LOOPS | | 1018 | 72278 | 8155 |
| 2 | VIEW | | 4072 | 69224 | 11 |
| 3 | COLLECTION ITERATOR SUBQUERY FETCH| | | | |
| 4 | TABLE ACCESS FULL | DUAL | 4072 | | 11 |
| 5 | TABLE ACCESS FULL | BBB | 41 | 287 | 2 |
| 6 | TABLE ACCESS BY INDEX ROWID | MEMBER | 1 | 54 | 2 |
|* 7 | INDEX UNIQUE SCAN | MEMBER_SITE_LID_PK | 4 | | 1 |
-----------------------------------------------------------

来源:http://www.tulaoshi.com/n/20160219/1625919.html

延伸阅读
其原因及解决方法: 1.开机程序越少,系统启动XX越快,开始-运行,键入"msconfig".点击"启动",建议你只留下:rfw main,RAV TMER ,RAV  MON此三项是瑞星杀毒软件,应随时启动对系统进行监视,ctfmon.exe是输入法显示,这项不要删掉,不然会遇麻烦的. 2. 另开始-所有程序,找到"启动".点击打开后,把里面全部删掉.有些...
标签: 服务器
FlashFXP加载慢的解决方法   FlashFXP是很多网站编辑都在使用的一款工具,把制作好的文件或者软件包一键上传,非常方便。当然,小编也是FlashFXP的用户,不过最近,小编发现FlashFXP变得很卡,选择一个目录之后,要加载很久,排除了网速慢的问题之后,小编发现:FlashFXP加载慢的问题出在参数的设置上,下面就一起来看看FlashFXP加载...
标签: 电脑入门
电信,网通都为用户提供了几种不同档次的网速可以选择. 一般家用的有1M. 2M 还有极速8M的. 我用的是电信ADSL2M的,每天费用是2元钱. 速度还可以啦,用BT下载的时候,一般都在210K左右. 关于宽带网速的小知识 基础知识: (1)关于bit(比特)/second(秒)与Byte(字节)/s(秒)的换算说明:线路单位是bps,表示bit(比特) /second(秒),注意是小写...
标签: 电脑入门
电脑速度慢 对于关机慢的解释: 1.开始 运行msconfig回车,启动,勾选杀毒软件,防火墙,输入法ctfmon三个其他的勾都去掉,确定,关闭,重起电脑看看 2.下载关机加速补丁,然后直接导入注册表在XP中关机时,系统会发送消息到运行程序和远程服务器,告诉它们系统要关闭,并等待接到回应后系统才开始关机。加快关机速度,可以先设置自动结束任...
比如: select * from table1 where name=''zhangsan'' and tID 10000 和执行: select * from table1 where tID 10000 and name=''zhangsan'' 一些人不知道以上两条语句的执行效率是否一样,因为如果简单的从语句先后上看,这两个语句的确是不一样,如果tID是一个聚合索引,那么后一句仅仅从表的10000条以后的记录中查找就行了;而前...

经验教程

564

收藏

66
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部