sql >> Database >  >> RDS >> Oracle

Waarom wordt er geen index gebruikt voor deze zoekopdracht?

UPDATE: Probeer de col-kolom NIET NULL te maken. Dat is de reden waarom het de index niet gebruikt. Als het niet nul is, is dit het plan.

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

Als de optimizer bepaalt dat het efficiënter is om de index NIET te gebruiken (misschien vanwege het herschrijven van de query), dan zal dat niet zo zijn. Optimizer-hints zijn precies dat, namelijk hints om Oracle een index te vertellen die u leuk vindt het te gebruiken. Je kunt ze zien als suggesties. Maar als de optimizer bepaalt dat het beter is om de index niet te gebruiken (opnieuw, bijvoorbeeld als gevolg van het herschrijven van query's), dan doet hij dat niet.

Raadpleeg deze link:http://download. oracle.com/docs/cd/B19306_01/server.102/b14211/hintsref.htm "Het specificeren van een van deze hints zorgt ervoor dat de optimizer het opgegeven toegangspad alleen kiest als het toegangspad beschikbaar is op basis van het bestaan ​​van een index of cluster en op basis van de syntactische constructies van de SQL-instructie. Als een hint een niet-beschikbaar toegangspad specificeert, dan negeert de optimizer het."

Aangezien u een count(*)-bewerking uitvoert, heeft de optimizer vastgesteld dat het efficiënter is om gewoon de hele tabel en hash te scannen in plaats van uw index te gebruiken.

Hier is nog een handige link over hints:http://www.dba-oracle.com/t_hint_ignored. htm



  1. Oracle SQL Auto Generated Identity Primary Key

  2. Favoriete trucs voor het afstemmen van prestaties

  3. MySQL zijn mijn indexen goed?

  4. SQL:Sleutels selecteren die niet in één tabel voorkomen