不用where怎么才能使用索引呢?

[复制链接]
查看11 | 回复9 | 2006-5-12 15:15:27 | 显示全部楼层 |阅读模式
比如select * from emp, 怎么修改才能在不使用where的前提下使用索引呢?
多谢了!
回复

使用道具 举报

千问 | 2006-5-12 15:15:27 | 显示全部楼层
最初由 smartlp 发布
[B]比如select * from emp, 怎么修改才能在不使用where的前提下使用索引呢?
多谢了! [/B]

比如select * from emp,这类语句你为什么要它用索引呢?全表扫描更快吧?
回复

使用道具 举报

千问 | 2006-5-12 15:15:27 | 显示全部楼层
最初由 smartlp 发布
[B]比如select * from emp, 怎么修改才能在不使用where的前提下使用索引呢?
多谢了! [/B]

告诉我,你为什么想用索引,用索引想干什么?你知道where 的意思吗?
回复

使用道具 举报

千问 | 2006-5-12 15:15:27 | 显示全部楼层
可以使用提示
回复

使用道具 举报

千问 | 2006-5-12 15:15:27 | 显示全部楼层
晕!估计你是刚接触数据库!还没有基本的认识!
否则不会这么问!
回复

使用道具 举报

千问 | 2006-5-12 15:15:27 | 显示全部楼层
最初由 herrick 发布
[B]可以使用提示 [/B]


如herrick所说, 可以用hint, 如
select /*+index idnex_name */ from table_name;
回复

使用道具 举报

千问 | 2006-5-12 15:15:27 | 显示全部楼层
最初由 fourstep 发布
[B]

如herrick所说, 可以用hint, 如
select /*+index idnex_name */ from table_name; [/B]


你这里根本就没有用where怎么用索引阿?
回复

使用道具 举报

千问 | 2006-5-12 15:15:27 | 显示全部楼层
用hint提示
回复

使用道具 举报

千问 | 2006-5-12 15:15:27 | 显示全部楼层
用hint就可以了吗?
回复

使用道具 举报

千问 | 2006-5-12 15:15:27 | 显示全部楼层
考虑下后,做了个实验
SQL> create table t(id number,name varchar2(100)) ;
表已创建。


SQL> create index t_id ont(id);
索引已创建。


SQL> insert into t values(1,'a') ;
已创建 1 行。
SQL> insert into t values(2,'a') ;
已创建 1 行。
SQL> insert into t values(3,'a') ;
已创建 1 行。
SQL> insert into t values(4,'a') ;
已创建 1 行。
SQL> commit ;
提交完成。
SQL> set autot traceonly exp ;
SP2-0613: 无法验证 PLAN_TABLE 格式或实体
SP2-0611: 启用EXPLAIN报告时出错
SQL> @?/rdbms/admin/utlxplan
表已创建。
SQL> set autot traceonly exp ;
SQL> select * from t ;
Execution Plan
----------------------------------------------------------
0SELECT STATEMENT Optimizer=CHOOSE
10 TABLE ACCESS (FULL) OF 'T'



SQL> select /*+index(t t_id)*/* from t ;
Execution Plan
----------------------------------------------------------
0SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=82 Bytes=5330

)
10 TABLE ACCESS (FULL) OF 'T' (Cost=2 Card=82 Bytes=5330)

SQL> select /*+index(t t_id)*/* from t where id =1;
Execution Plan
----------------------------------------------------------
0SELECT STATEMENT Optimizer=CHOOSE (Cost=1 Card=1 Bytes=65)
10 TABLE ACCESS (BY INDEX ROWID) OF 'T' (Cost=1 Card=1 Bytes=

65)
21 INDEX (RANGE SCAN) OF 'T_ID' (NON-UNIQUE) (Cost=1 Card=1

)


SQL> select /*+index(t t_id)*/* from t ;
Execution Plan
----------------------------------------------------------
0SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=82 Bytes=5330

)
10 TABLE ACCESS (FULL) OF 'T' (Cost=2 Card=82 Bytes=5330)

SQL>
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行