sql >> Database teknologi >  >> RDS >> Oracle

Oracle 10g - optimer WHERE IS NOT NULL

Optimizeren mener, at den fulde tabelscanning bliver bedre.

Hvis der kun er nogle få NULL rækker, er optimeringsværktøjet rigtigt.

Hvis du er helt sikker på, at indeksadgangen vil være hurtigere (det vil sige, du har mere end 75% rækker med col1 IS NULL ), og antyd derefter din forespørgsel:

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

Hvorfor 75% ?

Fordi du bruger INDEX SCAN at hente værdier, der ikke er dækket af indekset, indebærer en skjult joinforbindelse på ROWID , hvilket koster omkring 4 gange så meget som tabelscanning.

Hvis indeksområdet omfatter mere end 25% af rækker, er tabelscanningen normalt hurtigere.

Som nævnt af Tony Andrews , klyngefaktor er mere nøjagtig metode til at måle denne værdi, men 25% er stadig en god tommelfingerregel.



  1. Virkningen af ​​query_post_execution_showplan Extended Event i SQL Server 2012

  2. MSDTC på serveren 'serveren er ikke tilgængelig'

  3. Hvordan kan jeg liste alle fremmednøgler, der refererer til en given tabel i SQL Server?

  4. Fejl 404 ikke fundet med EM 12c