sql >> Databasteknik >  >> RDS >> Oracle

Varför används inte index för den här frågan?

UPPDATERING: Försök göra kolumnen kolumn NOT NULL. Det är anledningen till att den inte använder indexet. När den inte är null, här är planen.

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

Om optimeraren bestämmer att det är mer effektivt att INTE använda indexet (kanske på grund av att frågan har skrivits om), så gör den inte det. Optimeringstips är just det, nämligen tips för att berätta för Oracle ett index du gilla det att använda. Du kan se dem som förslag. Men om optimeraren avgör att det är bättre att inte använda indexet (igen, till exempel som ett resultat av omskrivning av en fråga), så kommer den inte att göra det.

Se denna länk:http://download. oracle.com/docs/cd/B19306_01/server.102/b14211/hintsref.htm "Att specificera en av dessa tips gör att optimeraren väljer den angivna åtkomstvägen endast om åtkomstvägen är tillgänglig baserat på förekomsten av ett index eller kluster och på de syntaktiska konstruktionerna av SQL-satsen. Om en ledtråd anger en otillgänglig åtkomstväg, då ignorerar optimeraren det."

Eftersom du kör en count(*)-operation har optimeraren bestämt att det är mer effektivt att bara skanna hela tabellen och hash istället för att använda ditt index.

Här är en annan praktisk länk för tips:http://www.dba-oracle.com/t_hint_ignored. htm



  1. mysql-uppdatering med regexp

  2. Vad betyder =*?

  3. Oracle-funktion för att jämföra strängar på ett oordnat sätt

  4. Hur hämtar man mysql-data i fallande ordning?