индексация в оракуле - PullRequest
       6

индексация в оракуле

1 голос
/ 14 октября 2011

У меня есть таблица

Name | Postal_CODE 

Я создал индекс для Postal_Code как

CREATE INDEX MNO on Table1(Postal_code).

, но когда я вижу план выполнения

select * from Table1 where Postal_code is not null

он показывает полное сканирование для Table1.It не использует индекс.Есть идеи почему?

Ответы [ 3 ]

4 голосов
/ 14 октября 2011

В индексах Oracle BTree не хранятся нулевые значения.Это означает, что вам нужно получить все строки из индекса, и в этом случае будет быстрее использовать полное сканирование.

1 голос
/ 14 октября 2011

Если более 10% (приблизительно) строк в таблице имеют коды postal_codes, то для Oracle более эффективно выполнять быстрое полное сканирование или полное сканирование таблицы, чем использовать индекс.

(10%очень грубое правило. YMMV.)

0 голосов
/ 14 октября 2011

В этой ситуации Oracle не будет хранить ссылку на строки, где Postal_code равен нулю.Поэтому он не будет использовать индекс.Это не так просто, так как Oracle, возможно, определил, что стоимость использования индекса дороже, чем сканирование таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...