Niedawno dowiedziałem się, że MySQL ma offset
funkcję. Próbowałem znaleźć dokumentację dotyczącą wyników przesunięcia lub różnicy między przesunięciem a wariantem ograniczenia, ale nie mogę znaleźć tego, czego szukam.
Powiedzmy, że mam 10.000 wierszy w tabeli i chcę 25 wyników z wiersza 1.000. Do tej pory mogłem zrobić oba, aby uzyskać ten sam wynik:
SELECT id,name,description FROM tablename LIMIT 1000,25
SELECT id,name,description FROM tablename LIMIT 25 OFFSET 1000
Chciałbym wiedzieć, jaka jest różnica między nimi.
- Czy to faktycznie robi to samo, czy też moje rozumienie jest błędne?
- Jest jeden wolniejszy / szybszy w większych tabelach
- Czy wynik przesunięcia zmienia się, gdy to robię
WHERE column=1
(powiedzmy, że kolumna ma> 100 różnych wartości) - Czy wynik przesunięcia zmienia się, gdy to robię
ORDER BY column ASC
(zakładając, że ma losowe wartości)
Jeśli jest to „głupie” pytanie i ktoś zna jakąkolwiek dokumentację wyjaśniającą ten temat, dodaj go w odpowiedziach.
Mam wrażenie, że przesunięcie pomija pierwsze X wierszy znalezionych w bazie danych, pomijając sortowanie i gdzie.
Odpowiedzi:
Pod względem działania
nie ma absolutnie żadnej różnicy w stwierdzeniach
Komentarz @ siride jest właśnie o to chodzi.
Z tej samej dokumentacji
TWOJE RZECZYWISTE PYTANIA
Ponieważ oba zapytania są takie same, nie ma różnicy
Użycie
LIMIT
nie zmienia żadnych zestawów wyników. Po prostu poruszają się w zestawie wyników.To zapytanie
byłoby inaczej niż
ponieważ LIMIT jest stosowany na innym etapie.
Pierwsze zapytanie nic nie zwraca, jeśli tablename ma mniej niż 1000 wierszy
Drugie zapytanie nic nie zwraca, jeśli podzapytanie ma mniej niż 1000 wierszy
WNIOSEK
Musisz wyrzeźbić zapytanie, aby upewnić się, że sortujesz dane na właściwym etapie
źródło