Oracle索引中的疑问

时间:2016-02-04 07:17:16

标签: oracle oracle11g

 Tran_id         Tran_name     Tran_region     Tran_Date    Tran_Item 
    1             Tanya         Europe          04-FEB-16    book
    2             Tanya         Europe          04-FEB-16    book1
    3             Tanya         Europe          04-FEB-16    book2
    4             Tanya         Europe          04-FEB-16    book3

对于此表,创建索引为索引(Tran_region,Tran_date)

让我们假设我的测试表中有一百万行

我需要根据Tran_name =' Tanya'来获取记录。 ,Tran_region =' Europe',Tran_date =' 04-Feb-16'

我的Oracle查询

SELECT * 
FROM TEST_TABLE 
WHERE Tran_name='Tanya' , Tran_region='Europe', Tran_date='04-Feb-16'

如何为我的查询运行索引,是基于索引列进行全表扫描还是扫描

当我为列Tran_region,Tran_date创建索引但在我的where子句中我指定了tran_name也没有编入索引。

感谢是否有人提供索引功能工作主体。我是Oracle技术的新手。

1 个答案:

答案 0 :(得分:1)

如果您运行该查询,它只会抛出一个错误,因为它无效。

在您运行之前,您 它可能选择不使用索引是出于奇怪的原因。但它可能会使用您的索引,因为您正在搜索索引的前导列。如果另一个索引存在所有的那些列(覆盖索引),它可能会使用它。

如果存在另一个缺少其中一个作为前导列的索引,则可能会对该索引执行跳过扫描。

它是索引中列的顺序,而不是where中重要的列顺序。