什么情况下全表扫描

freezh 2008-04-28 08:48:47
1、select * from a where title ="hello"
title 列上没有索引,是不是只要查询用到的列上没有索引,就会全表扫描

这条语句会全表扫描吗?

2、select * from a where title ="hello" and name = 'test';

name 上有索引,title上没有,这条语句会全表扫描吗?

是不是没有索引就会全表扫描?
...全文
311 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
meiZiNick 2008-05-01
  • 打赏
  • 举报
回复
我也想知道,正在找這方面的資料~~~~~
fjmingyang 2008-04-29
  • 打赏
  • 举报
回复
1 、oracle的优化器有两种RBO 和CBO类型
2、现在一般都是用CBO(cost based optimizer),基于成本的
3、where条件里的列都没有索引,那只能FTS了(比如你的例子1),但有index也不一定就走索引(比如你的例子2),CBO会智能的选择是否使用索引还是走全表扫描(FTS),这个要看走index还是FTS两者谁的成本(cost)低。成本高低判断要依赖于统计信息(statistics),所以你分析(analyze)你的表和索引。e.g.
analyze a compute statistics;
4、一般走index 比较好,( 但不是一定的,前面第3点已经说明),所以我们更多要去查找为什么有所索引而没走,情况有很多种
e.g. 对索引列进行运算,索引不存储空值,非leading column,索引的选择性不高等,这个google下,不再详述
qiyousyc 2008-04-29
  • 打赏
  • 举报
回复
对,全部是全表扫描
wffffc 2008-04-28
  • 打赏
  • 举报
回复
set autotrac on
自己看看就知道了

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧