比如有复合索引为3个字段:f1 + f2 + f3,请问:1: select f1, f2, f3, f4 from table where f1 = 'XX' and f2 = 'XX'.
2: select f1, f2, f3     from table where f1 = 'XX' and f2 = 'XX'.有人说1符合索引覆盖, 有人说只有2才符合, 请问哪个对?多谢!另请教如何本论坛获取分数? 每次都想送高点分给大家.

解决方案 »

  1.   


    楼主可以对这个2个SQL 分别做一个EXPLAIN PLAN, 看他们的执行计划是否走了索引..
      

  2.   

    如果表不是很小,Oracle大部分情况下会走
    1、索引扫描  + 根据rowid表扫描
    2、索引扫描
      

  3.   

    Oracle中的covering index(应该翻译成覆盖索引)是指# A covering index is an index, which includes all of the columns referenced in the query. So the creating covering index can improve performance because all the data for the query is contained within the index itself and only the index pages, not the data pages, will be used to retrieve the data. Covering indexes can bring a lot of performance to a query, because it can save a huge amount of I/O operations.从这个定义上讲,2符合,1不符合。
      

  4.   

    是不是要求select部分和where部分的字段必须出现在索引字段中,
    这样查询就只在索引数据中进行?
      

  5.   


    同意。 query 1需要根据index再重新get data。