没有想到字符串中的引号对性能产生这么大的影响。

[复制链接]
查看11 | 回复9 | 2005-10-30 17:05:33 | 显示全部楼层 |阅读模式
etxn_tbl资料量非常大,对于rrn建立PK。
执行以下SQL速度非常慢:
select * from etxn_tbl_his
where rrn=100000002683;
分析发现竟然是做的FULL TABLE SCAN:
Execution Plan
----------------------------------------------------------
0SELECT STATEMENT Optimizer=CHOOSE (Cost=661 Card=1 Bytes=169

)
10 TABLE ACCESS (FULL) OF 'ETXN_TBL_HIS' (Cost=661 Card=1 Byt

es=169)
结果,对条件中的字符串加上引号之后,就正常了。
select * from etxn_tbl_his
where rrn='100000002683';
Execution Plan
----------------------------------------------------------
0SELECT STATEMENT Optimizer=CHOOSE (Cost=3 Card=1 Bytes=169)
10 TABLE ACCESS (BY INDEX ROWID) OF 'ETXN_TBL_HIS' (Cost=3 Ca

rd=1 Bytes=169)
21 INDEX (UNIQUE SCAN) OF 'PK_ETXN_TBL_HIS' (UNIQUE) (Cost=

2 Card=1)
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
相当于加了个转换函数在查询语句中
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
数据类型的隐式转换。
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
如果 rrn是number类型的话
加不加引号 都还是会走索引
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
http://www.eygle.com/archives/2004/06/oracle-sql_trace1.html
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
隐式转换,不慢才怪了.
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
不知楼主用的是何版本,我记忆中9I版本里,数字和字符会自动转换。也就是,象楼主这种情况,
ORACLE 会根据比较条件中字段的类型,自动转换变量类型,以便优化执行计划。
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
隐式转换了
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
把数字放到数字类型中,把字符放在字符类型中,把日期放到日期类型中去。
这个原则挺简单的,可是实际中却有不少人不这么做
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
隐式转换,非常耗cpu资源.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行