Zkuste získat parametry nls z vašich různých případů (ideové nebo java programy), musí se lišit
select * from NLS_SESSION_PARAMETERS
Pak uvnitř procedury úložiště nastavte proměnné tak, aby se rovnaly od nejrychlejšího případu.
execute immediate 'alter session set NLS_SORT=''SPANISH''';
Jakmile budete mít SP všechny parametry nls. Poběží to rychle.
Nedávno jsem našel podobný případ v Alter session zpomaluje dotaz přes Hibernate . ale v jejich případě změní parametry a pak se zpomalí.
Zkoumal jsem a zjistil jsem, že parametry NLS_COMP y NLS_SORT mohou ovlivnit, jak Oracle využívá plán provádění pro řetězec (když se porovnává nebo objednává)
Když je NLS_COMP definován jako LINGUISTIC, použije jazyk definovaný v NLS_SORT.
například pokud NLS_COMP =LINGUISTIC a NLS_SORT=BINARI_AI váš dotaz
select * from table where string_column like 'HI%'
interně to udělá
select * from table where
NLSSORT(string_column,'BINARI_AI') >= HEXTORAW('324242432')
NLSSORT(string_column,'BINARI_AI') >= HEXTORAW('675757576')
takže pokud nemáte index pro NLSSORT(sloupec,'BINARI_AI'), bude to velmi pomalé.
s vědomím, že NLS_SORT=BINARY_AI způsobí, že vaše řazení a porovnávání nebude citlivé na akcent a malá a velká písmena.