2011-02-10 9 views
5

Używam tego samego SQL (poniżej), w 2 różnych środowiskach z tym samym zestawem indeksu i rozmiarem tabeli. Ale dali mi 2 różne wyjaśnić plany (attached)sam SQL, ale inny plan wyjaśniający

  1. używa Merge Dołącz kartezjański - bardzo powolny
  2. wykorzystuje PX Koordynator/PX Wyślij/PX ODBIORU - bardzo szybko

Query :

SELECT * 
FROM SIEBEL.S_PARTY PRTY, SIEBEL.S_CONTACT CONT, HPQ_IF_ENTERPRISE_DIRECTORY ED,SIEBEL.S_BU BU 
WHERE PRTY.ROW_ID = CONT.PAR_ROW_ID 
AND BU.ROW_ID(+)=CONT.BU_ID 
AND CONT.EMP_NUM IS NOT NULL 
AND ED.HPSTATUS NOT IN ('Terminated', 'Retired', 'Deceased') 
AND ED.EMPLOYEENUMBER = UPPER (LPAD (CONT.EMP_NUM, 8, '0')) 
AND (SUBSTR(ED.MODIFYTIMESTAMP,1,14) >= '19800101' OR ED.MODIFYTIMESTAMP IS NULL) 

Każdy pomysł, co jest możliwe, aby spowodować tę różnicę? A co oznacza 2-ty plan wyjaśniający (rzeczy PX)?

Zauważ, że nie szukam zmiany zapytania SQL (zamrożenie w produkcji).

Wielkie dzięki.

Odpowiedz

8

PX oznacza parallel processing. To może nie być dostępne w drugiej bazie danych z powodu ustawień sesji (lub jeśli inna baza danych jest innej wersji lub wersji).

+0

Dzięki Gary, masz rację. Stwierdziłem, że problem jest spowodowany przez "indeksy" posiadające stopień DEFAULT. Myślę, że to by zajęło wartość stopnia z poziomu sesji bazy danych, która mogłaby być inna. Po wymuszeniu stopnia na poziomie indeksu na 4, udało mi się go rozwiązać. Dzięki. – iwan

4

Plan kwerendy zależy nie tylko od wielkości tabeli i indeksów, ale także od wielu innych czynników, głównie statystyk dotyczących tabeli, jej kolumn i indeksów. Statystyki te obejmują takie czynniki, jak współczynnik klastrowania, który może mieć znaczny wpływ na obliczony koszt.

Ponadto, różne statystyki systemu, parametry optymalizatora, struktura tabeli (na przykład podzielona na partycje i niepodzielona na partycje) i wielkość bloku bazy danych, wszystkie wchodzą w grę, a najmniejsza różnica między środowiskami może spowodować, że inny plan będzie faworyzowany.

+0

Masz rację Jeffrey, dzięki. – iwan

3

Czy tabele mają różne STOPNIE? Sprawdź to zapytanie w obu środowiskach:

select table_name, degree from all_tables where table_name in ('S_PARTY', 'S_CONTACT', 'HPQ_IF_ENTERPRISE_DIRECTORY','S_BU'); 
+0

Dziękuję Jonearles, dziękuję za bliską odpowiedź - w mojej sytuacji. Zastanawiam się, które odpowiedzi powinienem przyjąć, skoro wszystkie mają rację :) – iwan

+0

W porządku, wystarczy, aby odpowiedzi były pomocne, zaznacz jako "właściwą" odpowiedź, która była najbardziej pomocna, a wszyscy będziemy szczęśliwi:) –

Powiązane problemy