Kiedy dodam LIMIT 1 do zapytania MySQL, czy zatrzymuje wyszukiwanie po znalezieniu 1 wyniku (tym samym przyspieszając), czy nadal pobiera wszystkie wyniki i obcina na końcu?
Kiedy dodam LIMIT 1 do zapytania MySQL, czy zatrzymuje wyszukiwanie po znalezieniu 1 wyniku (tym samym przyspieszając), czy nadal pobiera wszystkie wyniki i obcina na końcu?
Odpowiedzi:
W zależności od zapytania dodanie klauzuli limitu może mieć ogromny wpływ na wydajność. Jeśli potrzebujesz tylko jednego wiersza (lub wiesz na pewno, że tylko jeden wiersz może spełnić zapytanie) i nie masz pewności, w jaki sposób wewnętrzny optymalizator go wykona (na przykład klauzula WHERE nie trafiająca w indeks itd.), To zdecydowanie powinieneś dodać klauzulę LIMIT.
Jeśli chodzi o zapytania zoptymalizowane (przy użyciu indeksów na małych tabelach), prawdopodobnie nie będzie to miało większego znaczenia dla wydajności, ale znowu - jeśli interesuje Cię tylko jeden wiersz, to i tak dodaj klauzulę LIMIT.
Limit może wpływać na wydajność zapytania (patrz komentarze i link poniżej), a także zmniejsza zestaw wyników wysyłany przez MySQL. W przypadku zapytania, w którym spodziewasz się pojedynczego wyniku, istnieją korzyści.
Ponadto ograniczenie zestawu wyników może w rzeczywistości przyspieszyć całkowity czas zapytania, ponieważ przesyłanie dużych zestawów wyników zajmuje pamięć i potencjalnie tworzy tymczasowe tabele na dysku. Wspominam o tym, ponieważ ostatnio widziałem aplikację, która nie używała limitu zabijania serwera z powodu ogromnych zestawów wyników, a przy ograniczeniu wykorzystanie zasobów ogromnie spadło.
Sprawdź tę stronę, aby uzyskać więcej informacji: Dokumentacja MySQL: Optymalizacja LIMIT
Jeśli wraca tylko 1 wynik, to nie, LIMIT nie przyspieszy tego. Jeśli wyników jest dużo i potrzebujesz tylko pierwszego wyniku, a nie ma instrukcji GROUP ani ORDER, to LIMIT przyspieszy to.
Krótko mówiąc, tak. Jeśli ograniczysz wynik do 1, to nawet jeśli „oczekujesz” jednego wyniku, zapytanie będzie szybsze, ponieważ Twoja baza danych nie przejrzy wszystkich Twoich rekordów. Po prostu zatrzyma się, gdy znajdzie rekord pasujący do zapytania.
Jeśli naprawdę oczekujesz tylko jednego wyniku, to naprawdę sensowne jest dodanie LIMITU do zapytania. Nie znam wewnętrznego działania MySQL, ale jestem pewien, że nie zbierze zestawu wyników składającego się z ponad 100 000 rekordów tylko po to, aby na koniec skrócić go z powrotem do 1.
UNIQUE
(lubPRIMARY KEY
) ograniczenie (lub indeks) w kolumnie filtru. stackoverflow.com/questions/8467092/…