![]() |
![]() |
![]()
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: 435 Pomógł: 40 Dołączył: 16.02.2003 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Myślę, że zmiana STATUS i miejsce na pola TINYINT (unsigned przechowuje liczby do 255 więc w zupełności powinno wystarczyć do tych celów) rozwiąże Twój problem. O wiele cięższe jest porównanie stringów niż intów i z tym każdy musi się zgodzić.
W ogóle, wydaje mi się, że to, że status jest przechowywany w formie stringa świadczy o tym, że ktoś źle zaprojektował tą bazę. (jeśli dobrze sobie to wyobrażam, to STATUS to nie jest dowolny string, a jeden spośród listy możliwych statusów - więc idealnie int się do tego nadaje. Co do pola miejsce to zależy co tam przechowujesz, jak działa na tej samej zasadzie jak "status" to też można by było przerobić na inta. To pociąga ze sobą oczywiście zmiany w kodzie Twojej aplikacji. Jak wcześniej po prostu wyświetlałeś status to tutaj będziesz musiał robić coś w stylu $status[ID_STATUSU_POBRANE_Z_DB]. i $status = array('blablabla','blabla'); ale myślę, że o takich 'oczywistościach' już nie musze wspominać? (IMG:style_emoticons/default/wink.gif) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 4.10.2025 - 10:24 |