2016-01-13 10 views
5

Czy są jakieś korzyści z wydajności związane z dodawaniem zapytania LIMIT do zapytania EXISTS, czy też MySQL samodzielnie zastosuje ograniczenie?Każdy punkt przy użyciu LIMIT w kwerendzie EXISTS?

Przykład:

IF EXISTS (
    SELECT 1 
     FROM my_table 
    LIMIT 1 -- can this improve performance? 
) 
THEN ... END IF; 
+0

tak ... Poprawia to wydajność, ponieważ ograniczasz rekordy. –

+0

Czy próbowałeś używać 'EXPLAIN'? –

+0

@TimBiegeleisen, tak, to nie wygląda na zmienione. – shmosel

Odpowiedz

10

Celem EXISTS() jest przeprowadzenie kwerendy tylko do może zdecydować, czy istnieją jakieświerszy w tej tabeli dopasowania klauzuli WHERE. Oznacza to, że logicznie robi to samo, co LIMIT 1. EXISTS jest prawdopodobnie nazywany semi-join w niektórych kręgach.

Podsumowanie: nie używaj LIMIT 1 wewnątrz EXISTS().

0

błahy z mojego zapytania trochę, zauważyłem, że EXISTS nadal zwraca 1 jeśli LIMIT jest ustawiony na 0. Zakładam, oznacza to, że jest on ignorowany.

+0

Sugeruję, że 'LIMIT 0' jest nieprawidłowym przypadkiem krawędzi. –

0

To zależy od liczby rekordów w tabeli (my_table). Jeśli rekordy nie są zbyt duże, nie zauważysz poprawy wydajności, ale jeśli twoja tabela ma zbyt dużo rekordów, zobaczysz poprawę wydajności, ale będzie to również zależy od wielu czynników, ponieważ masz indeks w kolumnie, która jest używana w select (jeśli to zrobisz, zyskasz także korzyść z indeksu cover).

Powiązane problemy