sql >> Database teknologi >  >> RDS >> Oracle

Hvorfor er udførelsestiden for oracle-lagrede procedurer stærkt forøget afhængigt af, hvordan den udføres?

Prøv at hente nls-parametre fra dine forskellige cases (ide'er eller java-programmer), de skal være forskellige

select * from NLS_SESSION_PARAMETERS

Indstil derefter variablerne inde i din butiksprocedure, så de bliver lig fra den hurtigste sag.

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

Når du SP har alle nls parametre. Det vil køre hurtigt.

Jeg har for nylig fundet et lignende tilfælde i Alter-sessionen sænker forespørgslen gennem Hibernate. men i deres tilfælde ændrede de parametrene og blev så langsomme.

Jeg undersøgte og fandt ud af, at parametrene NLS_COMP og NLS_SORT kan påvirke, hvordan oracle gør brug af eksekveringsplan for streng (når den sammenligner eller bestiller)

Når NLS_COMP er defineret som LINGUISTIC, vil det bruge sproget defineret i NLS_SORT.

for eksempel, hvis NLS_COMP =LINGUISTIC og NLS_SORT=BINARI_AI din forespørgsel

select * from table where string_column like 'HI%'

internt vil det gøre

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

så hvis du ikke har et indeks for NLSSORT(kolonne,'BINARI_AI'), vil det være meget langsomt.

vel vidende, at NLS_SORT=BINARY_AI vil gøre din bestilling og sammenligninger ufølsomme for accent og store og små bogstaver.




  1. ORA 00904 Fejl:Ugyldig identifikator

  2. Denormalisering:Hvornår, hvorfor og hvordan

  3. C# parametriserede forespørgsler til Oracle - alvorlig og farlig fejl!

  4. Nye AMD-processorfamilier kan sammenlignes med nye Intel-processorer