请问这个语句如何优化啊?

[复制链接]
查看11 | 回复9 | 2006-9-7 17:03:51 | 显示全部楼层 |阅读模式
CREATE TABLE T_USER_TAB
(
ID
INTEGER
NOT NULL,
A VARCHAR(200),
B
VARCHAR(200),
C
VARCHAR(200),
D
VARCHAR(200),
FLAG INTEGER
)
这个表里有1百万条数据,
select id,a,b,c,d,efromT_USER_TAB where ROWNUM <= 200 and (FLAG= 0 or FLAG is null) order by ID
而且表里大部分是数据都FLAG是1,只有不会超过1百条是0或者null。请问这个索引怎么去建立啊?
Execution Plan
----------------------------------------------------------
0SELECT STATEMENT Optimizer=ALL_ROWS (Cost=5325 Card=8 Bytes=

1016)
10 SORT (ORDER BY) (Cost=5325 Card=8 Bytes=1016)
21 COUNT (STOPKEY)
32 TABLE ACCESS (FULL) OF 'T_USER_TAB' (TABLE) (Cost=5324 Card=8 Bytes=1016)


Statistics
----------------------------------------------------------

1recursive calls

0db block gets
19803consistent gets
19701physical reads

0redo size
1462bytes sent via SQL*Net to client
512bytes received via SQL*Net from client

2SQL*Net roundtrips to/from client

1sorts (memory)

0sorts (disk)

5rows processed
回复

使用道具 举报

千问 | 2006-9-7 17:03:51 | 显示全部楼层
针对这种查询,也许只有bitmap index比较有效。
回复

使用道具 举报

千问 | 2006-9-7 17:03:51 | 显示全部楼层
IT SHOULD BE
回复

使用道具 举报

千问 | 2006-9-7 17:03:51 | 显示全部楼层
建立Function Base index,B-Tree的
create index fbi_T_USER_TAB
on T_USER_TAB
decode(FLAG,0,0,null,0,null) ;
把查询改为
select id,a,b,c,d,e from T_USER_TAB where ROWNUM <= 200 and decode(FLAG,0,0,null,0,null) =0order by ID
回复

使用道具 举报

千问 | 2006-9-7 17:03:51 | 显示全部楼层
decode(FLAG,0,0,null,0,null)的意思应该不用解释了吧?
回复

使用道具 举报

千问 | 2006-9-7 17:03:51 | 显示全部楼层
最初由 rollingpig 发布
[B]decode(FLAG,0,0,null,0,null)的意思应该不用解释了吧? [/B]

如果仅仅查询0或者null,这样是可以滴。不过楼主的SQL貌似有问题,是否rownum条件应该放在order by 的外面一层。
回复

使用道具 举报

千问 | 2006-9-7 17:03:51 | 显示全部楼层
不用了解释,谢谢rollingpig。
现在系统里部署了N多这样的语句,假如不改SQL,有没有什么办法。
目前知道这个字段除了1 就是null。
回复

使用道具 举报

千问 | 2006-9-7 17:03:51 | 显示全部楼层
那就使用trigger, insert or update时把null置为 0 , create b-tree index on flag.
另外,加上not null的constraint.
回复

使用道具 举报

千问 | 2006-9-7 17:03:51 | 显示全部楼层
谢谢,真是经验丰富。
回复

使用道具 举报

千问 | 2006-9-7 17:03:51 | 显示全部楼层
我们的环境正好有很类似的案例……
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行