读书人

数据库中创建索引如何查询写出select语

发布时间: 2013-09-05 16:02:07 作者: rapoo

数据库中创建索引怎么查询写出select语句
创建表
create table user(id number(10),name varchar(109));
查询表
select * from user where id = 1;
创建索引
create index user_id(id);
1、写出查询user表中的数据按照索引查询,怎么写
???
2、查询的时候判断表是否有索引
???
用sql写出来,请教大师解决
数据库 索引 中创 select SQL
[解决办法]
1、写出查询user表中的数据按照索引查询,怎么写
???

select * from user where id = 1;

就是这么写。。但未必会走索引

2、查询的时候判断表是否有索引
???

不是看sql,而是看执行计划。。。。
[解决办法]
1. 表名不要用user 这是关键字。
2. 创建索引要加 on某个表名,你那样是创不出来的。
3. 写出查询user表中的数据按照索引查询,怎么写
楼主是想用hint来强制查询走 索引 么?
4、查询的时候判断表是否有索引
select index_name from user_indexes where table_name = '你的表名'
[解决办法]
执行开起来看一下就不就知道了吗?

hr@ORCL> select * from t where y='9999a';

hr@ORCL> select * from t where y='9999a';


Execution Plan
----------------------
Plan hash value: 2903481642

---------------------------------------------------

[解决办法]
Id
[解决办法]
Operation
[解决办法]
Name
[解决办法]
Rows
[解决办法]
Bytes
------解决方案--------------------


Cost (%CPU)
[解决办法]
Time
[解决办法]

---------------------------------------------------

[解决办法]
0
[解决办法]
SELECT STATEMENT
[解决办法]

[解决办法]
1
[解决办法]
11
[解决办法]
2 (0)
[解决办法]
00:00:01
[解决办法]


[解决办法]
1
[解决办法]
TABLE ACCESS BY INDEX ROWID
[解决办法]
T
[解决办法]
1
[解决办法]
11
[解决办法]
2 (0)
[解决办法]
00:00:01
[解决办法]


[解决办法]
* 2
[解决办法]
INDEX RANGE SCAN
------解决方案--------------------


IDX_T_Y
[解决办法]
1
[解决办法]

[解决办法]
1 (0)
[解决办法]
00:00:01
[解决办法]

---------------------------------------------------

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

2 - access("Y"='9999a')




[解决办法]
格式真槽糕

hr@ORCL> select * from t where y='9999a';


Execution Plan
----------------------
Plan hash value: 2903481642

---------------------------------------------------

[解决办法]
Id
[解决办法]
Operation
[解决办法]
Name
[解决办法]
Rows
[解决办法]
Bytes
[解决办法]
Cost (%CPU)
[解决办法]
Time
[解决办法]

---------------------------------------------------

[解决办法]
0
[解决办法]
SELECT STATEMENT
------解决方案--------------------



[解决办法]
1
[解决办法]
11
[解决办法]
2 (0)
[解决办法]
00:00:01
[解决办法]


[解决办法]
1
[解决办法]
TABLE ACCESS BY INDEX ROWID
[解决办法]
T
[解决办法]
1
[解决办法]
11
[解决办法]
2 (0)
[解决办法]
00:00:01
[解决办法]


[解决办法]
* 2
[解决办法]
<span style="color: #FF0000;"><span style="font-size: 18px;">INDEX RANGE SCAN</span></span>
[解决办法]
IDX_T_Y
[解决办法]
1
[解决办法]

[解决办法]
1 (0)
[解决办法]
00:00:01
[解决办法]

---------------------------------------------------



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

2 - access("Y"='9999a')



[解决办法]
上面都看不了 其实就这个 TABLE ACCESS BY INDEX ROWID 回表操作
[解决办法]

引用:
Quote: 引用:

上面都看不了 其实就这个 TABLE ACCESS BY INDEX ROWID 回表操作


那我在查询的时候要先判断一下是否存在索引吗,如果在正式的环境中我该怎么写呢
例如:
create table user(id number(10),name varchar(109));
查询表
select * from user where id = 1;
创建索引
create index user_id(i_id);
下面怎么查询,能不能帮忙写完整呢,谢谢哦

引用:
1. 表名不要用user 这是关键字。
2. 创建索引要加 on某个表名,你那样是创不出来的。
3. 写出查询user表中的数据按照索引查询,怎么写
楼主是想用hint来强制查询走 索引 么?
4、查询的时候判断表是否有索引
select index_name from user_indexes where table_name = '你的表名'

是的想强制的走索引

引用:
1、写出查询user表中的数据按照索引查询,怎么写
???

select * from user where id = 1;

就是这么写。。但未必会走索引

2、查询的时候判断表是否有索引
???

不是看sql,而是看执行计划。。。。

我是想强制走索引我该怎么办呢

用index hints就可以强制走索引
select /*+ index(user user_id) */ * from user where id=1;

读书人网 >oracle

热点推荐