sql >> Databasteknik >  >> RDS >> Oracle

PL/SQL-prestandajustering för LIKE '%...%' jokerteckenfrågor

Som redan nämnts kan du lägga till ett ctx-kontextindex till namnkolumnerna.

förutsatt att ett litet antal poster uppdateras, är ett alternativ att uppdatera ditt index dagligen. (och registrera när det hände)

lägg sedan till en kolumn och index för senaste uppdateringsdatum i din tabell som du söker efter.

Det bör vara möjligt att skanna ditt ctx-index för majoriteten av de gamla oförändrade data och välja från den lilla andelen uppdaterade data med den traditionella LIKEe.g:

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

OBS:du kanske tycker att din frågeplan blir lite mental (många bitmappskonverteringar till rad-ID) i så fall dela upp de två delarna av ELLER i en UNION ALL-fråga.t.ex.

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. Be dina användare att gå gaffeln själva

  2. Skapa ett SQL Server Agent Job med SSMS

  3. Beräknar antal hela månader mellan två datum i SQL

  4. Gå med fyra bord som involverar LEFT JOIN utan dubbletter