4
根據Oracle 9i性能調整技巧和技巧,使用IS NULL
或IS NOT NULL
將抑制列的索引 - 如果列上有索引,並且建議使列不可爲空並使用DEFAULT
。在Oracle 9i中查找無效列會抑制列的索引嗎?
問題是,即使我的選擇查詢不明確地使用IS NULL
或IS NOT NULL
,可否列將抑制索引?
根據Oracle 9i性能調整技巧和技巧,使用IS NULL
或IS NOT NULL
將抑制列的索引 - 如果列上有索引,並且建議使列不可爲空並使用DEFAULT
。在Oracle 9i中查找無效列會抑制列的索引嗎?
問題是,即使我的選擇查詢不明確地使用IS NULL
或IS NOT NULL
,可否列將抑制索引?
對於一般查詢,列可爲空的事實不會阻止優化器或查詢引擎使用索引,除非列上的條件爲IS NULL
或IS NOT NULL
。因此,一般的WHERE column = somevalue
查詢將使用該索引(如果適當的話)。
(空)列是索引中幾列之一的情況不太清楚。在沒有相反的具體信息的情況下,我假設如果索引中的其他列有標準,可能甚至在可空列上使用IS [NOT] NULL
標準,將使用該索引。它可能取決於可空列是否是索引的主要列。
我記得在複合索引(或任何其他項)的情況下,在9i之前,如果在where子句中未指定複合索引的首位列,則將使用全表掃描,但是我沒有讀到它提到的IS [NOT] NULL情況的部分。 –
如果沒有指定主要列(給定條件),那麼索引提供的收益最低或沒有收益,這就是爲什麼它沒有被使用。答案是準投機。我有信心的第一段;第二個不太清楚,我的其他DBMS經驗可能不適用於Oracle 9i。如果可空列是三列索引的第二列,並且爲第一列和第三列指定了相等條件,但爲第二列(可空)指定了「IS NOT NULL」,則我會_expect_指向被使用,但我不知道Oracle 9i會使用它。 –