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

ch18001203907

ch18001203907

2016-02-19 21:20

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

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

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

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';

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

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

  但是既然是外连接,为什么连接的顺序会改变呢?因为外连接的连接顺序不是由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'后,问题彻底解决。

---------------------------------------------------
| 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 |
-----------------------------------------------------------

展开更多 50%)
分享

猜你喜欢

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

编程语言 网络编程
一条SQL语句变得巨慢的原因及其解决方法

一条语句简单解决“每个Y的最新X”的经典sql语句

编程语言 网络编程
一条语句简单解决“每个Y的最新X”的经典sql语句

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

一条SQL语句搞定Sql2000 分页

编程语言 网络编程
一条SQL语句搞定Sql2000 分页

一条sql 语句搞定数据库分页

ASP
一条sql 语句搞定数据库分页

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

使用一条SQL语句删除表中重复记录

电脑网络
使用一条SQL语句删除表中重复记录

SQL查找某一条记录的方法

编程语言 网络编程
SQL查找某一条记录的方法

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

windows7系统管理无线网络界面图标变小且无法更改的解决方法

windows7系统管理无线网络界面图标变小且无法更改的解决方法

自由时代的新闻订阅win8应用

自由时代的新闻订阅win8应用
下拉加载更多内容 ↓