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

Ladění výkonu PL/SQL pro dotazy typu LIKE '%...%' se zástupnými znaky

Jak již bylo zmíněno, můžete do sloupců názvů přidat kontextový index ctx.

za předpokladu, že se aktualizuje malý počet záznamů, jednou možností je aktualizovat index denně. (a zaznamenejte, kdy se to stalo)

pak do prohledávané tabulky přidejte sloupec a index s datem poslední aktualizace.

Mělo by být možné skenovat váš ctx index pro většinu starých nezměněných dat a vybrat si z malého procenta aktualizovaných dat pomocí tradičního LIKEe.g:

WHERE (lastupdated<lastrefresh AND contains(name,'%ABC%')) 
   OR (lastupdated>lastrefresh AND name like '%ABC%')

POZNÁMKA:Možná zjistíte, že váš plán dotazů je trochu mentální (spousta bitmapových konverzí na ID řádků), v takovém případě rozdělte 2 části OR na dotaz UNION ALL.např

SELECT id FROM mytable   
    WHERE 
    (lastupdate>lastrefresh and name LIKE '%ABC%')
    UNION ALL
    SELECT id FROM mytable   
    WHERE lastupdate<lastrefresh and CONTAINS(name, '%ABC%', 1) > 0


  1. Benchmarking Postgres-XL

  2. Jak vypočítat medián v MySQL

  3. JDBC Create Table Příklad použití příkazu

  4. Jak monitorovat PostgreSQL běžící uvnitř kontejneru Docker:Část první