首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

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

2013-09-05 
数据库中创建索引怎么查询写出select语句创建表create table user(id number(10),name varchar(109))查询

数据库中创建索引怎么查询写出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;

热点排行