请帮帮忙,问题索引已建,但不走索引?
SQL如下:
SELECT *
FROM CP_SMS_PHONE_NUMBER csp
WHERE csp.phone_no like '138'||'%';
目前,phone_no字段上也有索引,在A库上执行能走索引,然后需要把A库的表导出到B库,B库上再执行相同的语句就不走索引了。具体执行计划
A库中得执行计划
---------------------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |---------------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 2 | 172 |
4 (0)| 00:00:01 || 1 | TABLE ACCESS BY INDEX ROWID| CP_SMS_PHONE_NUMBER | 2 | 172 |
4 (0)| 00:00:01 ||* 2 | INDEX RANGE SCAN | IDX_PHONENO | 2 | |
2 (0)| 00:00:01 |--------------------------------------------------------------------------------
B库中得执行计划
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |-----------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 262 | 22270 | 6 (0)| 00:00:01 ||* 1 | TABLE ACCESS FULL| CP_SMS_PHONE_NUMBER | 262 | 22270 | 6 (0)| 00:00:01 |--------------------------------------------------------------------------------
SQL如下:
SELECT *
FROM CP_SMS_PHONE_NUMBER csp
WHERE csp.phone_no like '138'||'%';
目前,phone_no字段上也有索引,在A库上执行能走索引,然后需要把A库的表导出到B库,B库上再执行相同的语句就不走索引了。具体执行计划
A库中得执行计划
---------------------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |---------------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 2 | 172 |
4 (0)| 00:00:01 || 1 | TABLE ACCESS BY INDEX ROWID| CP_SMS_PHONE_NUMBER | 2 | 172 |
4 (0)| 00:00:01 ||* 2 | INDEX RANGE SCAN | IDX_PHONENO | 2 | |
2 (0)| 00:00:01 |--------------------------------------------------------------------------------
B库中得执行计划
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |-----------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 262 | 22270 | 6 (0)| 00:00:01 ||* 1 | TABLE ACCESS FULL| CP_SMS_PHONE_NUMBER | 262 | 22270 | 6 (0)| 00:00:01 |--------------------------------------------------------------------------------
解决方案 »
- 如何计算时间差为日时分秒形式
- 使用ORACLE之EM的時候出现按钮乱码现象
- 100分求一个方法或函数拼接字符串(oracle 10g)
- ORA-01407: 无法更新 ("SCOTT"."TEACHERS"."EMAIL") 为 NULL
- 如何将solaris系统下的oracle数据库移植到windows系统中?
- 为什么我在windows2003下,安装不了oracle 9i
- 怎么样修改一张表的列名?
- oracle9刻的盘能用吗?
- 重要数据库的安全策略
- 关于oralce作业的问题,为什么到时间不执行?
- ibatis oracle 调用存储过程 无法取得返回值
- 存储过程中如何拆分一个字符串,使拆分的字符串可作为字段名使用?
说的很有道理啊,我也觉得可能oracle觉得做全表扫描代价更小,但最大的问题是为什么我在A库中执行同样的语句时就能用到索引呢?另外,在B库我已经dbms_stats.gather_table_stats(user,table_name);和dbms_stats.gather_index_stats(user,index_name);了?请问谁能分析下oracle是分析什么统计信息后(比如NUM_ROW=1448),选择是否走索引的么?