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

Hvorfor bruges der ikke indeks til denne forespørgsel?

OPDATERING: Prøv at gøre kolonnekolonnen IKKE NULL. Det er grunden til, at det ikke bruger indekset. Når den ikke er nul, er planen her.

SELECT STATEMENT, GOAL = ALL_ROWS           69  10  30
                    HASH GROUP BY           69  10  30
 INDEX FAST FULL SCAN   SANDBOX TEST_INDEX  56  98072   294216

Hvis optimeringsværktøjet bestemmer, at det er mere effektivt IKKE at bruge indekset (måske på grund af omskrivning af forespørgslen), så gør det det ikke. Optimeringstip er netop det, nemlig tip til at fortælle Oracle et indeks, du vil like det at bruge. Du kan tænke på dem som forslag. Men hvis optimeringsværktøjet bestemmer, at det er bedre ikke at bruge indekset (igen, f.eks. som følge af forespørgselsomskrivning), så gør den det ikke.

Se dette link:http://download. oracle.com/docs/cd/B19306_01/server.102/b14211/hintsref.htm "Angivelse af et af disse tip får optimeringsværktøjet til kun at vælge den angivne adgangssti, hvis adgangsstien er tilgængelig baseret på eksistensen af ​​et indeks eller en klynge og på de syntaktiske konstruktioner af SQL-sætningen. Hvis et tip angiver en utilgængelig adgangssti, så ignorerer optimeringsværktøjet det."

Da du kører en count(*)-operation, har optimeringsværktøjet fastslået, at det er mere effektivt bare at scanne hele tabellen og hash i stedet for at bruge dit indeks.

Her er et andet praktisk link til tip:http://www.dba-oracle.com/t_hint_ignored. htm



  1. MySQL - Hvordan sletter man fra tabel, når indlejret udvalg bruger den tabel?

  2. PDO - Fatal fejl:Kald til en medlemsfunktion fetch() på et ikke-objekt

  3. Wildcard-søgning af krypterede data i en MySQL-database?

  4. PHP:Visning af tabeldata ved hjælp af fetchall()