问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

为什么sql执行计划没有走索引

发布网友 发布时间:2022-05-06 17:14

我来回答

2个回答

懂视网 时间:2022-05-06 21:36

测试环境模拟: SQL drop table t_col_type purge; create table t_col_type(id varchar2(20),col2 varchar2(20),col3 varchar2(20)); insert into t_col_type select rownum,abc,efg from dual connect by level=10000; commit; create index idx_id on t_c

测试环境模拟:
SQL> drop table t_col_type purge;
create table t_col_type(id varchar2(20),col2 varchar2(20),col3 varchar2(20));
insert into t_col_type select rownum,'abc','efg' from dual connect by level<=10000;
commit;
create index idx_id on t_col_type(id);
set linesize 1000
set autotrace traceonlydrop table t_col_type purge
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> select * from t_col_type where id=6;

Execution Plan
----------------------------------------------------------
Plan hash value: 3191204463

--------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 36 | 8 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL | T_COL_TYPE | 1 | 36 | 8 (0)| 00:00:01 |
--------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

1 - filter(TO_NUMBER("ID")=6)

Note
-----
- dynamic sampling used for this statement


Statistics
----------------------------------------------------------
5 recursive calls
0 db block gets
64 consistent gets
0 physical reads
0 redo size
640 bytes sent via SQL*Net to client
469 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed

这里好像有点奇怪啊,明明建了index [create index idx_id on t_col_type(id);]但是为啥没有用到呢?

---查看表上列是否有索引
SQL> select index_name , table_name,column_name from all_ind_columns where table_name ='T_COL_TYPE';

INDEX_NAME
------------------------------------------------------------
TABLE_NAME
------------------------------------------------------------
COLUMN_NAME
--------------------------------------------------------------------------------
IDX_ID
T_COL_TYPE
ID

----查看表结构
SQL> desc scott.T_COL_TYPE
Name Null? Type
----------------------------------------- -------- ----------------------------
ID VARCHAR2(20)----------注意这里的字符类型
COL2 VARCHAR2(20)
COL3 VARCHAR2(20)


再次关注下 执行计划中的谓语信息:
1 - filter(TO_NUMBER("ID")=6) ----------这里发生了类型转换

所以在执行计划中就无法用已有的索引,那么如何才能让他正确走索引呢?

select * from t_col_type where id='6';------注意下这里的区别加了单引号,表明这是个字符,

Execution Plan
----------------------------------------------------------
Plan hash value: 3998173245

------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 36 | 2 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID | T_COL_TYPE | 1 | 36 | 2 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | IDX_ID | 1 | | 1 (0)| 00:00:01 |
------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

2 - access("ID"='6')

Note
-----
- dynamic sampling used for this statement


Statistics
----------------------------------------------------------
9 recursive calls
0 db block gets
39 consistent gets
1 physical reads
0 redo size
640 bytes sent via SQL*Net to client
469 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed

热心网友 时间:2022-05-06 18:44

1、你索引创建有误 没有覆盖你计划中的列
2、语句条件顺序和索引的不一致 也不会启用索引
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
修复征信是不是真的? 市面上征信修复公司可靠吗? 征信修复公司是真是假,真的可以修复吗? Emulex FC HBA卡 皮肤毛囊炎怎样治 银行自动扣款什么原因 银行什么情况自动扣款 贷款自动扣款什么意思 粤省事办理准生证需要多久 粤省事办理准生证步骤 为什么于嘉说山猫队和网队的比赛,少了易建联山猫进攻都没那么流畅了... 关于东莞的宽带报装,是托的勿进! 东莞中堂凤冲有联通宽带吗 请问在东莞中堂有装中国联通宽带的吗?有没有联系电话?大概费用是多少?网速怎么样?? 工伤假还能休年假吗 现在装宽带要多少钱!我是中堂三涌的. 请问谁知道紫色幽梦哪里有免费的看 root后re管理器无法删除文件,因为只读 挂载为读写也不行,求帮忙 求《爱情向东婚姻向西》TXT下载~主角是时慕琛,蓝小棠~作者慕寒 紫色幽梦免费阅读 在电脑上除了re文件管理器还有什么软件可以看到手机内部文件 【紫色幽梦】小说哪里可以看全文?求链接 re文件管理器删除文件后自动恢复 紫色幽梦全文免费阅读txt下载39章往后 求紫色幽梦全文,女主蓝小棠 你好,你有紫色幽梦蓝小棠那个小说是吗? 女主角蓝小棠男主角时慕琛小说是什么名 蓝小棠时慕琛小说叫什么 时慕琛蓝小棠小说叫什么名字 麻雀能吃苹果吗 麻雀是益鸟还是有害的鸟? 在东莞中堂蕉利想装联通宽带 谁有他们的联系方法 休3个月工伤假还会影响年假吗? 二婚盛嫁蓝小棠时慕琛全文阅读有吗 我要安装宽带2M 关于东莞装宽带的问题,是托的勿进 东莞中堂联通宽带如何? 东莞中堂拉移动4m宽带多少钱?可以用两台电脑玩cf吗? 东莞中堂现在有哪些宽带套餐? 工伤休假三个月还有年假吗 江苏省溧阳市中堂下村好装什么宽带 工伤假两个月还有年休假吗 2019年出了工伤休假5个月,2020年还能有年假吗? 职工出现工伤休息够两个月后还能休当年的年休假吗? 工伤期间遇上年假,年假也算是工伤假期吗? 我在电信网上营业厅申请了宽带迁移,不久有个客服打电话给我问我要地址,我说是在东莞市中堂镇蕉利沉塘峰 工伤员工享受工伤假期后还可以休年假吗 职工当年请了工伤假、还可以请年休假 工伤休假在家、还能享受年休假吗? 工伤休息后还能休年假吗? 工伤休息后还能休年假吗?