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

Dlaczego czas wykonywania procedury składowanej Oracle jest znacznie wydłużony w zależności od sposobu jej wykonania?

Spróbuj pobrać parametry nls z różnych przypadków (programy ide lub java), muszą być różne

select * from NLS_SESSION_PARAMETERS

Następnie w procedurze sklepu ustaw zmienne tak, aby były równe od najszybszego przypadku.

  execute immediate 'alter session set NLS_SORT=''SPANISH''';

Po SP masz wszystkie parametry nls. Będzie działać szybko.

Niedawno znalazłem podobny przypadek w sesji Alter spowalnia zapytanie przez Hibernate. ale w ich przypadku zmieniają parametry, a następnie stają się powolne.

Zbadałem i stwierdziłem, że parametry NLS_COMP y NLS_SORT mogą wpływać na sposób, w jaki oracle korzysta z planu wykonania dla ciągu znaków (kiedy porównuje lub zamawia)

Gdy NLS_COMP jest zdefiniowany jako LINGUISTIC, użyje języka zdefiniowanego w NLS_SORT.

na przykład, jeśli NLS_COMP =LINGUISTIC i NLS_SORT=BINARI_AI twoje zapytanie to

select * from table where string_column like 'HI%'

wewnętrznie to wystarczy

select * from table where  
NLSSORT(string_column,'BINARI_AI') >= HEXTORAW('324242432')
NLSSORT(string_column,'BINARI_AI') >= HEXTORAW('675757576')

więc jeśli nie masz indeksu dla NLSSORT (kolumna,'BINARI_AI'), będzie to bardzo wolne.

wiedząc, że NLS_SORT=BINARY_AI sprawi, że twoje zamówienia i porównania nie będą uwzględniały akcentu i wielkości liter.




  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 zintegrować Oracle i Kafka

  2. Obsługa wielu języków w 11i/R12

  3. Kiedy wywołuję PreparedStatement.cancel() w aplikacji JDBC, czy faktycznie zabija to w bazie danych Oracle?

  4. Dostrajanie SQL

  5. Zawsze pokazywać miejsca dziesiętne w SQL?