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

Czy substr czy LIKE są szybsze w Oracle?

Zakładając, że celem jest maksymalna wydajność, idealnie wybrałbym SUBSTR(my_field,1,6) i utwórz indeks oparty na funkcjach do obsługi zapytania.

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

Jak wskazują inni, SUBSTR(my_field,1,6) nie byłby w stanie użyć zwykłego indeksu w MY_FIELD . Wersja LIKE może korzystać z indeksu, ale w takim przypadku oszacowania kardynalności optymalizatora są na ogół raczej słabe, więc jest całkiem prawdopodobne, że albo nie użyje się indeksu, gdy będzie to pomocne, albo użyje indeksu, gdy skanowanie tabeli będzie preferowane. Indeksowanie rzeczywistego wyrażenia zapewni optymalizatorowi znacznie więcej informacji, z którymi może pracować, więc jest znacznie bardziej prawdopodobne, że poprawnie wybierze indeks. Ktoś mądrzejszy ode mnie może zasugerować sposób wykorzystania statystyk wirtualnych kolumn w 11g, aby zapewnić optymalizatorowi lepsze informacje dla zapytania LIKE.

Jeśli 6 jest zmienną (tzn. czasami chcesz przeszukać pierwsze 6 znaków, a czasami inną liczbę), prawdopodobnie nie będziesz w stanie wymyślić indeksu opartego na funkcji do obsługi tego zapytania. W takim przypadku prawdopodobnie lepiej poradzisz sobie z kaprysami decyzji optymalizatora z formułą 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. Jak korzystać z partycji lub max?

  2. Wymagania dotyczące odzyskiwania przed tworzeniem kopii zapasowych

  3. Używanie Dappera z procedurami składowanymi Oracle, które zwracają kursory

  4. Jak sformatować miesiąc za pomocą cyfr rzymskich w Oracle

  5. Zwracanie wartości kolumny tożsamości po wstawieniu do Oracle