设为首页
收藏本站
开启辅助访问
切换到窄版
登录
立即注册
中问网首页
我的收藏
站长博客
搜索
搜索
本版
帖子
用户
第一问答网
»
论坛
›
中问网
›
问答
›
BETWEEN AND 走全表掃描
返回列表
发新帖
BETWEEN AND 走全表掃描
[复制链接]
11
|
9
|
2010-1-4 08:33:08
|
显示全部楼层
|
阅读模式
Hello,
SQL很簡單:
SELECT VER_1, ITEM_1,ITEM_2 fromTableName WHERE :B1 BETWEEN ITEM_1 AND ITEM_2
ITEM_1& ITEM_2都有單獨建索引,兩個欄位也有建組合索引,為什麼還是全表掃描.
數據量有11萬筆,難道是不走索引更有效?
數據庫版本是RAC 10.2.0.4
Redhat 64位
回复
使用道具
举报
千问
|
2010-1-4 08:33:08
|
显示全部楼层
我簡單測試後. 確實會走索引
無論是 CBO, RBO
可能跟數據庫的資料分佈有關
回复
使用道具
举报
千问
|
2010-1-4 08:33:08
|
显示全部楼层
是不是 返回的数据 非常多呢
回复
使用道具
举报
千问
|
2010-1-4 08:33:08
|
显示全部楼层
最多返回一行
我重新建一個測試Table,也是全表掃描
回复
使用道具
举报
千问
|
2010-1-4 08:33:08
|
显示全部楼层
你可以这样试试~
单独运行这个SQL 不用绑定变量
看看执行计划
我没环境没法测试~这个应该好解决
[
本帖最后由 iori809 于 2011-1-31 13:06 编辑
]
回复
使用道具
举报
千问
|
2010-1-4 08:33:08
|
显示全部楼层
很简单的一个SQL.
也仅仅返回一行
不绑定变量,替换为具体的值,也还是全表扫描
我是用pl/sql Developer测试的
回复
使用道具
举报
千问
|
2010-1-4 08:33:08
|
显示全部楼层
至少贴一下执行计划吧,估算的Card是多少?
回复
使用道具
举报
千问
|
2010-1-4 08:33:08
|
显示全部楼层
为什么不多提供点信息呢
回复
使用道具
举报
千问
|
2010-1-4 08:33:08
|
显示全部楼层
插了一个图片
回复
使用道具
举报
千问
|
2010-1-4 08:33:08
|
显示全部楼层
下面是我做的测试~索引是个复合索引
都是索引扫描没问题的
scott@CCDB> select * from salgrade;
GRADELOSALHISAL
---------- ---------- ----------
1700 1200
2 1201 1400
3 1401 2000
4 2001 3000
5 3001 9999
scott@CCDB> select * from salgrade where 2222 between LOSAL and HISAL;
GRADELOSALHISAL
---------- ---------- ----------
4 2001 3000
Execution Plan
----------------------------------------------------------
Plan hash value: 3196158779
----------------------------------------------------------------------------------------
| Id| Operation
| Name | Rows| Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT
|
| 4 |40 | 2 (0)| 00:00:01 |
| 1 |TABLE ACCESS BY INDEX ROWID| SALGRADE | 4 |40 | 2 (0)| 00:00:01 |
|*2 | INDEX RANGE SCAN
| LH_INDEX | 4 | | 1 (0)| 00:00:01 |
----------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("HISAL">=2222 AND "LOSAL"=2222)
Statistics
----------------------------------------------------------
1recursive calls
0db block gets
3consistent gets
0physical reads
0redo size
656bytes sent via SQL*Net to client
520bytes received via SQL*Net from client
2SQL*Net roundtrips to/from client
0sorts (memory)
0sorts (disk)
1rows processed
我建议在SERVER端的SQLPLUS用trace在试试看,要不就看看统计信息
回复
使用道具
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
千问
主题
0
回帖
4882万
积分
论坛元老
论坛元老, 积分 48824836, 距离下一级还需 -38824837 积分
论坛元老, 积分 48824836, 距离下一级还需 -38824837 积分
积分
48824836
加好友
发消息
回复楼主
返回列表
问答
热门排行