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

Защо времето за изпълнение на съхранената процедура на Oracle се увеличава значително в зависимост от това как се изпълнява?

Опитайте да получите nls параметри от вашите различни случаи (ide's или java програми) те трябва да са различни

select * from NLS_SESSION_PARAMETERS

След това вътре в процедурата на магазина задайте променливите, за да ги направите равни от най-бързия случай.

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

След като SP имате всички nls параметри. Ще работи бързо.

Съвсем наскоро открих подобен случай в Alter session забавя заявката чрез Hibernate. но в техния случай те променят де параметрите и след това стават бавни.

Проучих и открих, че параметрите NLS_COMP y NLS_SORT могат да повлияят на това как Oracle използва план за изпълнение за низ (когато се сравнява или подрежда)

Когато NLS_COMP е дефиниран като LINGUISTIC, той ще използва езика, дефиниран в NLS_SORT.

например, ако NLS_COMP =LINGUISTIC и NLS_SORT=BINARI_AI вашата заявка

select * from table where string_column like 'HI%'

вътрешно ще направи

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

така че ако нямате индекс за NLSSORT(колона,'BINARI_AI'), той ще бъде много бавен.

знаейки, че NLS_SORT=BINARY_AI ще направи подреждането и сравненията ви без значение за акценти и малки букви.




  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. .NET / Oracle:Как да изпълним скрипт с DDL изрази програмно

  3. Статичен срещу динамичен sql

  4. oracle 12c - изберете низ след последното появяване на символ

  5. Oracle SQL GROUP BY не е помощен израз за GROUP BY