sql >> Databáze >  >> RDS >> Oracle

Proč se doba provádění uložené procedury Oracle výrazně prodlužuje v závislosti na způsobu jejího provádění?

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.




  1. Jak dynamicky mapovat vstupní a výstupní sloupce v SSIS?

  2. Které metody lze použít ke správě různých verzí již existujících databází?

  3. Dotaz Android SQLite, kde sloupec není prázdný a není prázdný

  4. LIMIT 10..20 na serveru SQL