W najgorszym przypadku, gdy patrzysz na niezaindeksowane pole, używając MIN()
wymaga jednego pełnego przejścia stołu. Korzystanie z SORT
i LIMIT
wymaga sortowania plików. Jeśli grasz przeciwko dużej tabeli, prawdopodobnie będzie znaczna różnica w postrzeganej wydajności. Jako anegdotyczny punkt danych, MIN()
zajęło .36s, podczas gdy SORT
i LIMIT
wziął .84s w porównaniu z tabelą 106 000 wierszy na moim serwerze deweloperskim.
Jeśli jednak patrzysz na kolumnę indeksowaną, różnica jest trudniejsza do zauważenia (bez znaczenia punkt danych to 0,00s w obu przypadkach). Jednak patrząc na wynik explain wygląda to tak:MIN()
jest w stanie po prostu pobrać najmniejszą wartość z indeksu (wiersze „Wybierz zoptymalizowane tabele” i „NULL”), podczas gdy SORT
i LIMIT
nadal musi wykonać uporządkowane przechodzenie indeksu (106 000 wierszy). Rzeczywisty wpływ na wydajność jest prawdopodobnie znikomy.
Wygląda jak MIN()
to droga do zrobienia — jest szybsza w najgorszym przypadku, nieodróżnialna w najlepszym przypadku, jest standardowym SQL i najwyraźniej wyraża wartość, którą próbujesz uzyskać. Jedyny przypadek, w którym wydaje się, że użycie SORT
i LIMIT
byłoby pożądane, ponieważ mson
wspomniałem, gdzie piszesz ogólną operację, która znajduje górne lub dolne N wartości z dowolnych kolumn i nie warto pisać operacji na przypadek specjalny.