sql >> Database teknologi >  >> RDS >> Oracle

PL/SQL Performance Tuning for LIKE '%...%' Wildcard-forespørgsler

Som allerede nævnt kan du tilføje et ctx-kontekstindeks til navnekolonnerne.

forudsat at et lille antal poster bliver opdateret, er 1 mulighed at opdatere dit indeks dagligt. (og optag, hvornår det skete)

derefter tilføje en sidste opdatering dato kolonne &indeks til din tabel, der søges.

Det burde være muligt at scanne dit ctx-indeks for størstedelen af ​​de gamle uændrede data og vælge fra den lille procentdel af opdaterede data ved hjælp af det traditionelle LIKEe.g:

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

BEMÆRK:du kan opleve, at din forespørgselsplan bliver lidt mental (mange bitmapkonverteringer til række-id'er) i så fald opdeler de 2 dele af OR i en UNION ALL-forespørgsel.f.eks.

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. Brug af Unpivot-trinnet til at lave en tabeltabel ud af en krydstabel

  2. Overvågning af ydeevnetællere via PERFMON | SQL Server Performance Fejlfinding -3

  3. Guide til designdatabase til quiz i MySQL

  4. TDS Server - Brug Transact-SQL (T-SQL)-erklæringer til at arbejde med Salesforce-data i SQL Server