sql >> Databáze >  >> RDS >> Oracle

Proč se pro tento dotaz nepoužívá index?

AKTUALIZACE: Zkuste nastavit sloupec col NOT NULL. To je důvod, proč nepoužívá index. Když to není null, tady je plán.

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

Pokud optimalizátor určí, že je efektivnější index NEPOUŽÍVAT (možná kvůli přepsání dotazu), tak to nepoužije. Tipy Optimalizátoru jsou přesně takové, jmenovitě rady, jak sdělit společnosti Oracle index, který byste chtěli to použít. Můžete je považovat za návrhy. Pokud však optimalizátor určí, že je lepší index nepoužívat (opět například v důsledku přepsání dotazu), tak to nebude.

Podívejte se na tento odkaz:http://download. oracle.com/docs/cd/B19306_01/server.102/b14211/hintsref.htm "Zadání jedné z těchto nápověd způsobí, že optimalizátor zvolí zadanou přístupovou cestu pouze v případě, že je přístupová cesta dostupná na základě existence indexu nebo klastru a syntaktických konstrukcí příkazu SQL. Pokud nápověda uvádí nedostupnou přístupovou cestu, pak to optimalizátor ignoruje."

Vzhledem k tomu, že spouštíte operaci count(*), optimalizátor zjistil, že je efektivnější místo použití indexu prohledat celou tabulku a hash.

Zde je další užitečný odkaz na rady:http://www.dba-oracle.com/t_hint_ignored. htm



  1. MIN a MAX agregační funkce v SQL Server

  2. Postgres connection pooling – více uživatelů

  3. MySQL:Uspořádejte podle velikosti/délky pole

  4. rychlý náhodný výběr řádků v Postgresu