Tomek Łos Tom Eł
Temat: [MySQL] Optymalizacja zapytania - mam sporo informacji,...
Cześć, mam takie oto zapytanie:
SELECT DISTINCT T.NumerRef
FROM
m_transporty_miejsca AS TM LEFT JOIN
m_transporty AS T ON (T.ID=TM.ID_transport)
WHERE
1 AND
(AnulowanyFE2='0' OR DateRealizacji>='2011-06-30') AND
1 AND
T.Odleglosc>='0' AND
T.Odleglosc<='99' AND
T.ImportFE='1' AND
(
(T.STATUS='zaksięgowane w SAP' AND (T.DataDostarczenia IS NULL AND T.ID_przewoznik='72'))
OR
(T.STATUS='przedstawiony' AND (T.Miejsce='akt'))
OR
(T.STATUS='gielda' AND (T.Miejsce='akt' AND T.Gielda='1'))
OR
(T.Miejsce='akt' AND T.ID_przewoznik='72')
)
ORDER BY T.ID
Tabela m_transporty_miejsca 200 000 rekordów
Tabela m_transporty 100 000 rekordów
raczej małe ilości.
Zapytanie wykonuje się około 0,8s (średnia z 20pomiarów).
Jeśli usunę ostatni warunek w klauzuli WHERE:
( Miejsce='akt' OR (STATUS='zaksięgowane w SAP' AND DataDostarczenia IS NULL) )
a szczególnie
OR (STATUS='zaksięgowane w SAP' AND DataDostarczenia IS NULL)
wówczas czas zapytania spada do 0,03 (średnia z 20pomiarów)
Indexy jakie min. mam pozakładane na tabelę m_transporty to:
ImportFE1: (ImportFE)
ImportFE2: (ImportFE+Miejsce)
ImportFE3: (ImportFE+Status+DataDostarczenia)
EXPLAIN tego zapytania wskazuje, że użyty jest indeks "ImportFE1"
Proszę o pomoc w optymalizacji.Tomek Łos edytował(a) ten post dnia 10.07.11 o godzinie 12:55