Używam InnoDB. Muszę zapytać, aby uzyskać 10 rekordów z tabeli, to każde zamówienie.Czy można bezpiecznie używać LIMIT bez ZAMÓWIENIA PRZEZ
Czy używanie LIMITU BEZ ORDERU jest bezpieczne? Czy byłoby szybciej?
Używam InnoDB. Muszę zapytać, aby uzyskać 10 rekordów z tabeli, to każde zamówienie.Czy można bezpiecznie używać LIMIT bez ZAMÓWIENIA PRZEZ
Czy używanie LIMITU BEZ ORDERU jest bezpieczne? Czy byłoby szybciej?
Jeśli nie używasz BY wtedy nie sortuje twoich rekordów, więc zdecydowanie przyspieszy pobieranie danych. Więc jeśli po prostu użyjesz LIMIT, będzie to szybsze w porównaniu do danych pobranych przez ORDER BY. Należy jednak pamiętać, że w takim przypadku dane nie będą miały żadnej kolejności.
Jeśli chodzi o bezpieczeństwo, nie jestem pewien co do bezpieczeństwa, o którym myślisz, ponieważ nie ma potencjalnej szkody w zapytaniu, które używa tylko LIMIT i nie używa klauzuli ORDER BY.
Można również spojrzeć na artykuł: ORDER BY … LIMIT Performance Optimization
Tak, możesz i tak, byłoby to szybciej (zakładając, że kolejność nie ma znaczenia dla ciebie). order by
wymaga sortowania. Oznacza to, że baza danych musi wykonać więcej pracy, aby uzyskać wynik. Najczęściej limit
jest używany z order by
ponieważ chcesz umieścić pewne ograniczenia zamawiania na który 10 rekordy dostać (słownie najnowszą, najwyższą rangę jakimś itd)
To zależy, co uważasz za, sejf, jeśli chcesz spójny wynik (meanning, otrzymuję ten sam rezultat za każdym razem tak długo, jak zawartość tabeli nie ulegnie zmianie), czy chcesz konkretny wynik (biggesty, najnowsze, najstarsze, cokolwiek) - to wymaga zamówienia. Jeśli dla bezpieczeństwa mówisz, że zapytanie nie zostanie zmiażdżone i nie dbasz o to, które wyniki X uzyskasz - niż tak, użycie limitu jest w porządku (jest to faktycznie wykonywane automatycznie przez wiele narzędzi sql, takich jak mysql workbench, aby przyspieszyć działanie).
Pod względem Speed-będzie to niszczyciel bez celu z dwóch powodów:
limit 10
będą działać szybciej niż limit 100000
na dużych tabelach. Kiedy używasz zamówienia, serwer musi przejść przez wszystkie wyniki, więc nie może zatrzymać się w środku.Więc tak, aby za pomocą limitu bez pozwoli szybciej
The 3 odpowiedzi do tej pory są dobre. Ale nie są one całkowicie poprawne.
przeciwieństwie do innych odpowiedzi, czasami pomijając ORDER BY
będzie nie zrobić to szybciej. Optymalizator może i tak wygenerować wiersze w tej kolejności. Przykłady:
GROUP BY
zwykle zamawia wyniki. Tak więc, jeśli ORDER BY
będzie pasować do GROUP BY
, nie ma dodatkowego wysiłku.ORDER BY the_primary_key
może odpowiadać kolejności pobierania. Jest to prawie zagwarantowane w przypadku InnoDB bez klauzuli WHERE
."Bezpieczny" nie jest obliczany.
możesz użyć limitu bez zamówienia przez. jakiego rodzaju bezpieczeństwa chcesz? –