Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle 10g - оптимизиране КЪДЕ НЕ Е NULL

Оптимизаторът смята, че пълното сканиране на таблицата ще бъде по-добро.

Ако има само няколко NULL редове, оптимизаторът е прав.

Ако сте абсолютно сигурни, че достъпът до индекса ще бъде по-бърз (тоест имате повече от 75% редове с col1 IS NULL ), след което подскажете вашата заявка:

SELECT  /*+ INDEX (t index_name_on_col1) */
        *
FROM    mytable t
WHERE   col1 IS NOT NULL

Защо 75% ?

Тъй като се използва INDEX SCAN за извличане на стойности, които не са обхванати от индекса, предполага скрито присъединяване към ROWID , което струва около 4 пъти повече от сканирането на таблицата.

Ако диапазонът на индекса включва повече от 25% от редове, сканирането на таблицата обикновено е по-бързо.

Както бе споменато от Tony Andrews , факторът на групиране е по-точен метод за измерване на тази стойност, но 25% все още е добро правило.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използване на Oracle JDeveloper 12c с Oracle Database 12c на Oracle Cloud Platform, част 1

  2. Научете за пакета DBMS_OUTPUT в Oracle

  3. Многоезична поддръжка в 11i/R12

  4. Функция ROUND(дата) в Oracle

  5. получавате редица уникални стойности, без да разделяте стойности, които принадлежат на един и същ блок от стойности