- 最后登录
- 2017-5-10
- 在线时间
- 44 小时
- 威望
- 69
- 金钱
- 243
- 注册时间
- 2012-6-26
- 阅读权限
- 50
- 帖子
- 158
- 精华
- 2
- 积分
- 69
- UID
- 530
|
1#
发表于 2012-6-29 17:07:31
|
查看: 2419 |
回复: 0
比如说有两个表A和B 分别有100个块和200个块.
现在从A表提取符合条件的数据,跟B表符合条件的数据JOIN
select c.name,c.student_id,course_name,score
from
(
select student_id,name
from a
where a.name like '张%'
) c
inner join
(
select b.score,student_id,course_id,course_name
from b
where insert_time >to_date('2012-03-08','YYYY-MM-DD')
) d
on c.student_id=d.student_id
如果没索引,
步骤1 所有的块读到内存中.
步骤2 在内存中进行过滤
步骤3 关联操作
步骤4 把结果运送到PGA内存中
问题 1 内存进行过滤 是进行块过滤还是行过滤,
如果进行块过滤,包含需要数据的块留下,数据分散在不同块中,也就是说所留下来的块也包含了不需要的数据;
如果行过滤: 在内存中新开辟缓存,把所需要的数据提取到新内存缓存里?
问题 2 过滤掉不需要的列 是不是在PGA里完成,在发生给客户端的时候.
因为执行计划最后一步是SELECT 操作? |
|