sql >> Databáze >  >> RDS >> Oracle

Oracle 10g - optimalizujte WHERE IS NOT NULL

Optimalizátor se domnívá, že úplné skenování tabulky bude lepší.

Pokud existuje jen několik NULL řádků, má optimalizátor pravdu.

Pokud jste si naprosto jisti, že přístup k indexu bude rychlejší (to znamená, že máte více než 75% řádky s col1 IS NULL ), poté naznačte svůj dotaz:

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

Proč 75% ?

Protože pomocí INDEX SCAN pro načtení hodnot, které index nepokrývá, znamená skryté spojení na ROWID , což stojí asi 4 krát tolik než skenování tabulky.

Pokud rozsah indexu zahrnuje více než 25% řádků je prohledávání tabulky obvykle rychlejší.

Jak zmínil Tony Andrews , shlukovací faktor je přesnější metodou měření této hodnoty, ale 25% je stále dobré pravidlo.



  1. Skutečný únikový řetězec a PDO

  2. Jak zobrazit řádky, které nejsou přítomny v jiné tabulce v MySQL

  3. Jak funguje funkce REGEXP_SUBSTR() v MySQL

  4. Jak převést velká písmena na malá v MySQL