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

Substr или LIKE по-бърз ли е в Oracle?

Ако приемем, че целта е максималната производителност, в идеалния случай бих избрал SUBSTR(my_field,1,6) и създайте индекс, базиран на функции, за да поддържа заявката.

CREATE INDEX my_substr_idx
    ON my_table( substr( my_field,1,6 ) );

Както посочват други, SUBSTR(my_field,1,6) няма да може да използва обикновен индекс в MY_FIELD . Версията LIKE може да използва индекса, но оценките за мощността на оптимизатора в този случай обикновено са доста лоши, така че е много вероятно или да не използва индекс, когато би бил полезен, или да използва индекс, когато сканирането на таблица би било за предпочитане. Индексирането на действителния израз ще даде на оптимизатора много повече информация, с която да работи, така че е много по-вероятно да избере индекса правилно. Някой по-умен от мен може да е в състояние да предложи начин за използване на статистически данни за виртуални колони в 11g, за да даде на оптимизатора по-добра информация за заявката LIKE.

Ако 6 е променлива (т.е. понякога искате да търсите в първите 6 знака, а понякога искате да търсите различно число), вероятно няма да можете да измислите индекс, базиран на функции, който да поддържа тази заявка. В такъв случай вероятно ще ви е по-добре с капризите на решенията на оптимизатора с формулировката LIKE.



  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

  2. Административни скриптове в R12.2 Ebuisness Suite

  3. SQL - Намерете израз, който вмъква конкретни стойности

  4. Как да създадете колона, която не е нула в изглед

  5. Име на SQL колона, същото като име на променлива PL/SQL - Как може да се направи това в оператор select?