带索引的Oracle性能

时间:2014-02-02 16:47:53

标签: sql performance oracle

如果我有包含数百万条记录的表TABLE1,请说。 该表有COLUMN A,B和C. 我的指数为A和B. C根本没有编入索引。

之后我按照下面的方式进行查询

  1. 我运行查询Select * from TABLE1 where A='something' and B='something'
  2. 我运行查询Select * from TABLE1 where A='something' and B='something' and C='something'
  3. 我知道两个查询都将使用我指定的索引。根据我的理解,两个查询的性能应该是相同的。但是,查询是否有可能比其他查询具有更好的性能/运行速度?为什么呢?

1 个答案:

答案 0 :(得分:2)

查询不一定会使用索引。 Oracle决定根据索引的“选择性”使用索引进行查询。因此,如果90%的行都有a = 'something' and b = 'something'为真,则全表扫描比使用索引更快。

在这两种情况下,指数的选择性都是相同的(假设比较值相同)。所以两者都应该使用相同的执行计划。

即便如此,第二个查询通常会运行得更快一些,因为它通常会有一个较小的结果集。结果集的大小是查询性能的另一个因素。

顺便说一下,两者都可以利用table1(A, B, C)上的索引。

此外,在“冷”数据库(一个刚开始没有运行查询的数据库)中,第二个应该运行得更快,原因很简单,部分或全部数据已经加载到页面和索引缓存中。