sql >> Database >  >> RDS >> Oracle

Afstemming van PL/SQL-prestaties voor LIKE '%...%'-query's met jokertekens

Zoals eerder vermeld, zou je een ctx-contextindex kunnen toevoegen aan de naamkolommen.

ervan uitgaande dat een klein aantal records wordt bijgewerkt, is de eerste optie om uw index dagelijks te vernieuwen. (en opnemen wanneer het gebeurde)

voeg vervolgens een kolom en index voor de datum van de laatste update toe aan uw tabel waarin wordt gezocht.

Het zou mogelijk moeten zijn om uw ctx-index te scannen op het merendeel van de oude ongewijzigde gegevens en een selectie te maken uit het kleine percentage bijgewerkte gegevens met behulp van de traditionele LIKEe.g:

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

OPMERKING:u zult merken dat uw zoekplan een beetje mentaal wordt (veel bitmapconversies naar rij-ID's), in dat geval splitst u de 2 delen van de OR in een UNION ALL-query.e.g.

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. De wizard Offline reorg gebruiken

  2. meerdere records weergeven met behulp van resultatenset

  3. Activiteit en achtergrondservice Toegang tot SQLite-database

  4. 4 functies om het uur uit een tijdwaarde te halen in MariaDB