请问:如果一张表有10个字段,分别是col1,col2....col10.
建立索引 index1包括列:col1,col2,col3
那么,我查询的语句的where条件里有col2='XX',请问是否会用到索引index1
如果where条件是col2='XX' and col4='XXX',能用到索引index1吗?谢谢!

解决方案 »

  1.   

    请问 数据量要达到多少才会用到索引?如果where条件是col2='XX' and col4='XXX' 你说的重复值是指哪个列的重复值啊?
      

  2.   

    可以会使用index skip scan,但是跳跃式索引9i后才有
    SQL> CREATE INDEX test_idx ON test(a,b,c)2 /索引已创建。SQL> ANALYZE TABLE test COMPUTE STATISTICS2 FOR TABLE3 FOR ALL INDEXES4 FOR ALL INDEXED COLUMNS5 /表已分析。SQL> set autotrace traceonly explainSQL> SELECT * FROM test WHERE b = 992 /Execution Plan---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=35 Card=2 Bytes=64)
    1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST' (Cost=35 Card=2 Bytes
    =64) 
     2 1 INDEX (SKIP SCAN) OF 'TEST_IDX' (NON-UNIQUE) (Cost=34 Ca
    rd=1) 其它还有:
    l INDEX UNIQUE SCAN(按索引唯一值扫描) 
    select * from zl_yhjbqk where hbs_bh='5420016000' 
    l INDEX RANGE SCAN(按索引值范围扫描) 
    select * from zl_yhjbqk where hbs_bh>'5420016000' 
    select * from zl_yhjbqk where qc_bh>'7001' 
    l INDEX FAST FULL SCAN(按索引值快速全部扫描) 
    select hbs_bh from zl_yhjbqk order by hbs_bh 
    select count(*) from zl_yhjbqk 
    select qc_bh from zl_yhjbqk group by qc_bh
      

  3.   

    你还要注意索引次序,比如按你的在col1,col2,col3建了索引,依次为:
    col1
    col1,col2
    col1,col3
    col1,col2,col3
      

  4.   

    用8i的备份导入9i,对于联合索引(a,b,c),where b=''是不能用索引的。
    cenlmmx(学海无涯苦作舟)  不知道怎么用,where a=可以用索引,b和c都不行