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

Je substr nebo LIKE rychlejší v Oracle?

Za předpokladu, že cílem je maximální výkon, ideálně bych zvolil SUBSTR(my_field,1,6) a vytvořte index založený na funkcích pro podporu dotazu.

CREATE INDEX my_substr_idx
    ON my_table( substr( my_field,1,6 ) );

Jak zdůrazňují ostatní, SUBSTR(my_field,1,6) nebude moci použít běžný index na MY_FIELD . Verze LIKE může používat index, ale odhady mohutnosti optimalizátoru jsou v takovém případě obecně dost špatné, takže je docela pravděpodobné, že index buď nepoužijete, když by to bylo užitečné, nebo index použil, když by bylo vhodnější skenování tabulky. Indexování skutečného výrazu poskytne optimalizátoru mnohem více informací, se kterými bude pracovat, takže je mnohem pravděpodobnější, že index vybere správně. Někdo chytřejší než já může být schopen navrhnout způsob, jak využít statistiky o virtuálních sloupcích v 11g, aby měl optimalizátor lepší informace pro dotaz LIKE.

Pokud je 6 proměnná (tj. někdy chcete hledat prvních 6 znaků a někdy chcete hledat jiné číslo), pravděpodobně nebudete schopni vytvořit index založený na funkcích, který by tento dotaz podporoval. V takovém případě vám pravděpodobně lépe vyjdou rozmary rozhodnutí optimalizátoru s formulací LIKE.



  1. Schéma databáze, autoinkrementace

  2. Funkce EXP() v Oracle

  3. Oprava Msg 8114 „Chyba při převodu datového typu varchar na číselný“ v SQL Server

  4. Jak se připojím k databázi SQL Server 2008 pomocí JDBC?