2011-09-06 14 views

回答

1

對於一般查詢,列可爲空的事實不會阻止優化器或查詢引擎使用索引,除非列上的條件爲IS NULLIS NOT NULL。因此,一般的WHERE column = somevalue查詢將使用該索引(如果適當的話)。

(空)列是索引中幾列之一的情況不太清楚。在沒有相反的具體信息的情況下,我假設如果索引中的其他列有標準,可能甚至在可空列上使用IS [NOT] NULL標準,將使用該索引。它可能取決於可空列是否是索引的主要列。

+0

我記得在複合索引(或任何其他項)的情況下,在9i之前,如果在where子句中未指定複合索引的首位列,則將使用全表掃描,但是我沒有讀到它提到的IS [NOT] NULL情況的部分。 –

+0

如果沒有指定主要列(給定條件),那麼索引提供的收益最低或沒有收益,這就是爲什麼它沒有被使用。答案是準投機。我有信心的第一段;第二個不太清楚,我的其他DBMS經驗可能不適用於Oracle 9i。如果可空列是三列索引的第二列,並且爲第一列和第三列指定了相等條件,但爲第二列(可空)指定了「IS NOT NULL」,則我會_expect_指向被使用,但我不知道Oracle 9i會使用它。 –