Pomagam w utrzymaniu programu, który jest w zasadzie przyjaznym dla czytelników front-endem dla dużej i skomplikowanej bazy danych MySQL - program buduje ad-hoc SELECT zapytania od danych wejściowych użytkowników, wysyła zapytania do DB, pobiera wyniki, przetwarza je i ładnie wyświetla z powrotem do użytkownika.Jak używać EXPLAIN do * przewidywania * wydajności zapytania MySQL?
Chciałbym dodać jakąś formę rozsądnej/heurystycznej prognozy dla oczekiwanego wykonania skonstruowanej kwerendy - czasami użytkownicy nieumyślnie robią zapytania, które nieuchronnie będą trwać bardzo długo (ponieważ zwrócą ogromne zestawy wyników, lub dlatego, że "idą przeciw ziarnu" sposobu indeksowania bazy danych) i chciałbym móc wyświetlić użytkownikowi "nieco wiarygodne" informacje/zgadnąć, jak długo potrwa zapytanie. Nie musi być perfekcyjna, o ile nie robi się tak źle i często nie ma nic wspólnego z rzeczywistością, co powoduje efekt "płaczącego wilka", gdy użytkownicy uczą się lekceważyć ;-) Na podstawie tych informacji użytkownik może zdecydować się na kawę (jeśli szacunek to 5-10 minut), pójść na lunch (jeśli zajmie to 30-60 minut), zabić zapytanie i spróbować czegoś innego (może być ściślejszym ograniczeniem informacji, których zażądają), itp, itd.
nie jestem bardzo obeznany z MySQL wyjaśniają oświadczenie - widzę wiele informacji wokół tego, jak go używać do optimize zapytanie lub schematu DB jest, indeksowanie, etc, ale nie wiele o tym, jak z niego korzystać w moim bardziej ograniczonym celu - po prostu zrób przewidywanie, biorąc DB jako dane (oczywiście, jeśli przewidywania są wystarczająco wiarygodne, mogę w końcu przejść do korzystania z nich również do wyboru między alternatywnymi formami a Zapytanie może zająć, ale to na przyszłość: na razie byłbym bardzo szczęśliwy, pokazując wyniki dla użytkowników w wyżej wymienionych celach).
Jakieś wskazówki ...?
nie generujemy sub-zapytań w tym czasie, tak aby nieco nie powinno być problemem. Ale dzięki za wskaźnik - i wiadomość, że nie ma dobrego sposobu na oszacowanie kosztu zapytania (złe wieści, ale lepiej się uczyć, zanim spędzę nieograniczony czas na ściganiu chimery!). –
EXPLAIN jest niezwykle pomocny. Nie wiem, dlaczego to jest "odpowiedź". Kasy kasowej - im większa liczba wierszy, tym więcej operacji należy wykonać. Pokazuje również, które, jeśli w ogóle, indeksy są używane. Ma to kluczowe znaczenie dla wydajności SELECT. Jeśli chodzi o podzapytania, bardzo rzadko zdarza się, że są one rzeczywiście potrzebne - powinny być refaktoryzowane, gdy tylko jest to możliwe ze względu na jasność. –