![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 660 Pomógł: 13 Dołączył: 9.06.2004 Skąd: Wrocław i okolice Ostrzeżenie: (0%) ![]() ![]() |
Cześć, mam takie oto zapytanie:
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:
a szczególnie
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. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 660 Pomógł: 13 Dołączył: 9.06.2004 Skąd: Wrocław i okolice Ostrzeżenie: (0%) ![]() ![]() |
Cytat Abstrahując od powyższych wypowiedzi - zwróciłeś uwagę na fakt że warunek który drastycznie zmienia czas wykonania różni się czymś od pozostałych? Bo jak dla mnie wyróżnia go jedno - klauzula IS(NOT) NULL. Wcześniej wykonujesz LEFT JOIN - złączenie zewnętrzne. Te złączenia nie dają się tak łatwo optymalizować jak złączenia wewnętrzne (INNER JOIN) zwłaszcza że tutaj dokonujesz porównania na wartości NULL (która jest tworzona przez LEFT JOIN). Podejrzewam że z tym warunkiem baza musi przemielić znacznie więcej rekordów niż bez niego - i to pewnie wpływa na czas wykonania. Poeksperymentuj jak to wygląda bez porównań do NULLa (lub spróbuj je jakoś wyeliminować). Dzięki, całkowite usunięcie warunki z IS NULL nic nie dało w przyspieszeniu zapytania (IMG:style_emoticons/default/sad.gif) Cytat rochę dziwne używać ENUM dla wartosci numerycznych Czy dla pól, które mogą przyjąć tylko wartości 0/1/2/3 - lepiej jest użyć (small)int czy Enum (0/1/2/3)? Czy konwersja ENUM->SMALLINT nie sprawi mi kłopotu (utrata danych/kłopoty w zapytaniach?) dzięki. Ten post edytował TomASS 10.07.2011, 13:35:53 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 5.10.2025 - 16:01 |