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

解决方案 »

  1.   

    1、写出查询user表中的数据按照索引查询,怎么写
    ???select * from user where id = 1; 就是这么写。。但未必会走索引2、查询的时候判断表是否有索引
    ???不是看sql,而是看执行计划。
      

  2.   

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

  3.   

    执行开起来看一下就不就知道了吗?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')
      

  4.   

    格式真槽糕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')
      

  5.   

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

  6.   


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

  7.   


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