« 不小心给移动宰了一次及以后 | (回到Blog入口) | 安装windows live messenger 1061错误解决 »

查询没有使用索引原因检查一例

表数据200万,使用一个字段查询,该字段上有索引,客户说没有使用索引。

1.要表结构

create table STAT_SALE
(
  OIDD          NUMBER(20) not null,
  CODE          VARCHAR2(20) not null,
  SHOPCODE      VARCHAR2(20) not null,
  SHOPNAME      VARCHAR2(50) not null,
  GOODSCODE     VARCHAR2(20) not null,
  GOODSNAME     VARCHAR2(100),

...

create index U_STATSALE_GOODSCODE on STAT_SALE (GOODSCODE)  ... 

2.要查询语句

select * from stat_sale a where a.goodscode=290957

聪明的你现在应该可以看出没有使用索引的原因了。

愚蠢的我没有发现。

3.执行

select count(*) from stat_sale;
select num_rows from user_tables where table_name = 'STAT_SALE';

2086984  和 null
分析是没有analyze的原因

3.analyze

analyze table STAT_SALE estimate statistics sample 5000 rows;
analyze index U_STATSALE_GOODSCODE compute statistics;
analyze table stat_sale estimate statistics sample 5000 rows for all columns;

4.再执行上述语句看执行计划

仍然没有使用索引 。

faint.

此时才发现,类型是varchar2,而=后面是数字,发生了类型转换,没有使用索引。

数字加上''后,使用了索引。

引用通告

TrackBack URL for this entry:
如果您想引用这篇文章到您的Blog,
请复制下面的链接,并放置到您发表文章的相应界面中。
http://www.fengshanjian.net/cgi-bin/mt/mt-tb.cgi/22

发表一个评论

(如果你此前从未在此 Blog 上发表过评论,则你的评论必须在 Blog 主人验证后才能显示,请你耐心等候。)

关于

此页面包含了发表于2006年10月18日 上午10时10分的 Blog 上的单篇日记。

此 Blog 的前一篇日记是 不小心给移动宰了一次及以后

此 Blog 的后一篇日记是 安装windows live messenger 1061错误解决

更多信息可在 主索引 页和 归档 页看到。

Powered by
Movable Type 3.34