Oracle
 sql >> база данни >  >> RDS >> Oracle

PL/SQL настройка на производителността за LIKE '%...%' заместващи заявки

Както вече споменахме, можете да добавите ctx контекстен индекс към колоните с имена.

ако приемем, че малък брой записи се актуализират, 1 опция е да опреснявате индекса си ежедневно. (и запишете кога се е случило)

след това добавете колона и индекс за дата на последната актуализация към търсената от вас таблица.

Трябва да е възможно да сканирате вашия ctx индекс за по-голямата част от старите непроменени данни и да изберете от малкия процент актуализирани данни, като използвате традиционния LIKEe.g:

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

ЗАБЕЛЕЖКА:може да откриете, че планът ви за заявка е малко умствен (много преобразувания на растерни изображения в идентификатори на редове) в този случай разделете 2-те части на ИЛИ в заявка UNION ALL, напр.

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. Как да премахнете дубликатите от списъка, разделен от пространството от Oracle regexp_replace?

  2. Безопасно TO_NUMBER()

  3. Oracle PL/SQL:Пример DBMS_SCHEDULER.CREATE_JOB

  4. Извличане на общия брой секунди от интервален тип данни

  5. Сигнал за сигурност на Oracle за CVE-2021-44228