sql >> Databasteknik >  >> RDS >> Oracle

Oracle 10g - optimera WHERE IS NOT NULL

Optimeraren tror att genomsökningen av hela tabellen kommer att bli bättre.

Om det bara finns några NULL rader är optimeraren rätt.

Om du är helt säker på att indexåtkomsten blir snabbare (det vill säga du har mer än 75% rader med col1 IS NULL ), tipsa sedan om din fråga:

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

Varför 75% ?

Eftersom du använder INDEX SCAN att hämta värden som inte täcks av indexet innebär en dold koppling på ROWID , vilket kostar ungefär 4 gånger så mycket som tabellskanning.

Om indexintervallet innehåller mer än 25% av rader är tabellsökningen vanligtvis snabbare.

Som nämnts av Tony Andrews , klustringsfaktor är en mer exakt metod för att mäta detta värde, men 25% är fortfarande en bra tumregel.



  1. Anslutningshantering i PostgreSQL:En guide

  2. skapa anpassad funktion för datumskillnad exklusive helger och helgdagar i oracle sql

  3. Hur får man BLOB från fil i PL/SQL?

  4. Hur man återställer förtroende för en främmande nyckelbegränsning i SQL Server (T-SQL-exempel)