Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Dostrajanie wydajności PL/SQL dla zapytań z symbolami wieloznacznymi LIKE '%...%'

Jak już wspomniano, możesz dodać indeks kontekstu ctx do kolumn nazw.

zakładając, że aktualizowana jest niewielka liczba rekordów, jedną z opcji jest codzienne odświeżanie indeksu. (i nagraj, kiedy to się stało)

następnie dodaj kolumnę i indeks ostatniej aktualizacji do przeszukiwanej tabeli.

Powinno być możliwe przeskanowanie indeksu ctx w poszukiwaniu większości starych niezmienionych danych i wybranie z niewielkiego procentu zaktualizowanych danych przy użyciu tradycyjnego LIKEe.g:

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

UWAGA:może się okazać, że Twój plan zapytania jest trochę mentalny (wiele konwersji bitmap na identyfikatory wierszy), w takim przypadku podziel 2 części OR na zapytanie UNION ALL.np.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Linq to Entities Group By (OUTER APPLY) oracle 11.2.0.3.0 nie obsługuje zastosowania

  2. cd:-M:nieprawidłowa opcja

  3. Jak mogę wyodrębnić pliki z pola Oracle BLOB?

  4. PLSQL :NOWY i :STARY

  5. Podstawowa tabela audytu wyzwalaczy Oracle