Försök att hämta nls-parametrar från dina olika fall (ides eller java-program) de måste vara olika
select * from NLS_SESSION_PARAMETERS
Ställ sedan in variablerna i din butiksprocedure så att de blir lika från det snabbaste fallet.
execute immediate 'alter session set NLS_SORT=''SPANISH''';
När du SP har alla nls parametrar. Det kommer att gå snabbt.
Jag hittade nyligen ett liknande fall i Alter session saktar ner frågan genom Hibernate. men i deras fall ändrade de parametrarna och blev sedan långsamma.
Jag undersökte och fann att parametrarna NLS_COMP och NLS_SORT kan påverka hur oracle använder exekveringsplan för sträng (när den jämför eller beställer)
När NLS_COMP definieras som LINGUISTIC kommer det att använda språket som definieras i NLS_SORT.
till exempel, om NLS_COMP =LINGUISTIC och NLS_SORT=BINARI_AI din fråga
select * from table where string_column like 'HI%'
internt kommer det att göra
select * from table where
NLSSORT(string_column,'BINARI_AI') >= HEXTORAW('324242432')
NLSSORT(string_column,'BINARI_AI') >= HEXTORAW('675757576')
så om du inte har ett index för NLSSORT(kolumn,'BINARI_AI') kommer det att gå väldigt långsamt.
att veta att NLS_SORT=BINARY_AI kommer att göra din beställning och jämförelser okänslig för accent och skiftläge.