Jaka jest domyślna kolejność zapytań, gdy nie jest używana ORDER BY
?SQL: Jaka jest domyślna kolejność zapytań?
Odpowiedz
Nie ma. W zależności od zapytania i optymalizacji zapytania możesz uzyskać dowolne zamówienie. Nie ma nawet żadnej gwarancji, że dwa zapytania, które wyglądają tak samo, zwrócą wyniki w tej samej kolejności: jeśli tego nie określisz, nie możesz na nich polegać.
nadal, jeśli znasz silnik i istniejące indeksy, możesz przewidzieć kolejność =) – newtover
@newtover true, ale dodanie "ORDER BY" jest o wiele łatwiejsze niż przewidywanie planu zapytania i przywoływanie fizycznego układu, który sugerowałbym przyklejenie do byłego :) Miło cię tu spotkać. – alf
Przewidywanie zamówienia jest przydatne, gdy wyraźne zamówienie może spowodować tymczasowe tabele i pliki, chociaż wymagane zamówienie już istnieje. Niemniej wyraźne jest lepsze niż niejawne. Miło cię poznać :) – newtover
Nie ma takiego zamówienia. Zrobione z http://forums.mysql.com/read.php?21,239471,239688#msg-239688
nie zależy od kolejności, gdy ORDER BY brakuje.
Zawsze określaj ORDER BY, jeśli chcesz, aby konkretne zamówienie - w niektórych sytuacjach silnik może wyeliminować ORDER BY z powodu sposobu, w jaki robi jakiś inny krok.
- GROUP BY ORDER BY BY. (Jest to naruszenie normy można uniknąć za pomocą ORDER BY NULL..)
SELECT * FROM tbl
- to zrobi „skanowanie tabeli”. Jeśli tabela ma nigdy nie zawierała żadnych DELETE/REPLACE/UPDATE, rekordami będą w kolejności wstawiania, stąd to, co zaobserwowałeś.Jeśli zrobiłeś to samo oświadczenie z tabelą InnoDB, to zostałyby one dostarczone w porządku NAJWYŻSZEJ KLUCZY, a nie WSTAWIĆ. Ponownie, jest to artefakt leżący u podstaw wdrożenia, a nie zależny od tego, na czym polega .
Świetna odpowiedź i jest zgodna z http: //dba.stackexchange. com/q/6051/877, ponieważ nie ma gwarancji między silnikami pamięci masowej i między wersjami, w których zamówienie jest w ogóle określone. +1 !!! – RolandoMySQLDBA
Domyślna kolejność zależy od indeksów użytych w zapytaniu iw jakiej kolejności są one używane. Może się zmienić w miarę zmiany danych/statystyk, a optymalizator wybiera różne plany.
Jeśli chcesz dane w określonej kolejności, należy użyć ORDER BY
mam znaleźć SQL Server, aby być niemal losowo w domyślnej kolejności (w zależności od wieku i stopnia złożoności danych), co jest dobre, jak zmusza cię do określenia wszystkich porządków.
(I mgliście pamiętam Oracle jest podobny do SQL Server w tym zakresie).
MySQL domyślnie wydaje się zamówić przez strukturę rekordu na dysku, (który może zawierać out-of-sekwencji wpisów z powodu delecji i optymalizacje), ale często początkowo oszukuje deweloperów, aby nie zawracali sobie głowy użyciem klauzul zleceń, ponieważ dane wydają się domyślnie zamawiać z kluczem podstawowym, co oznacza, że jest to sprawa , a nie.
Zaskoczyło mnie, że dziś mogę odkryć, że MySQL 5.6 i 4.1 pośrednio podrzędnie zapisują dane, które zostały posortowane w kolumnie o ograniczonej rozdzielczości w przeciwnym kierunku:. Niektóre z moich wyników mają identyczne wartości sortowania, a ogólna kolejność jest nieprzewidywalna. na przykład w moim przypadku był to sortowany DESC według kolumny datetime, a niektóre wpisy były w tej samej sekundzie, więc nie można było ich jawnie zamówić. Na MySQL 5.6 wybierają one w jednej kolejności (kolejność wstawiania), ale w 4.1 wybierają do tyłu! Doprowadziło to do bardzo irytującego błędu instalacji.
I have't znaleźć dokumentację na tej zmianie, ale okazało notes on on implicit group order in MySQL:
Domyślnie MySQL sortuje wszystkie GROUP BY col1, col2 ... zapytaniami jakby określono ORDER BY col1, col2, ... również w zapytaniu.
Jednakże:
Powołując się na niejawny GROUP BY sortowania w MySQL 5.5 jest przestarzała. Aby osiągnąć konkretny porządek sortowania pogrupowanych wyników, lepiej jest użyć jawnej klauzuli ORDER BY.
Tak więc w porozumieniu z innymi odpowiedziami - nigdy nie należy polegać na domyślnej lub domyślnej kolejności w dowolnej bazie danych.
- 1. Jaka jest domyślna kolejność listy zwróconej przez wywołanie filtru Django?
- 2. jqGrid domyślna kolejność sortowania?
- 3. Kolejność wykonywania zapytań/klauzul MySQL
- 4. Jaka jest prawidłowa kolejność tych klauzul podczas pisania zapytania SQL?
- 5. Jaka jest konwencja dotycząca określania złożonych zapytań SQL w Railsach?
- 6. TSQL - Jaka jest właściwa kolejność łączenia tabel?
- 7. Powiązana relacja danych podstawowych - jak jest zarządzana lub jaka jest domyślna kolejność?
- 8. Czy istnieje "Domyślna kolejność według kolumn" w SQL Server?
- 9. Jaka jest wartość domyślna elementu w tablicy?
- 10. Jaka jest domyślna czcionka dla ggplot2
- 11. Python: Jaka jest domyślna obsługa SIGTERM?
- 12. Jaka jest domyślna ścieżka debug.keystore na Macu?
- 13. Jaka jest domyślna strefa czasowa w java.util.Date
- 14. Jaka jest domyślna metoda HTTP formularza?
- 15. Jaka jest kolejność wykonywania w NUnit?
- 16. Jaka jest kolejność wartości konfiguracyjnych odczytu?
- 17. Domyślna kolejność wierszy w zapytaniu SELECT - SQL Server 2008 kontra SQL 2012
- 18. Wymagana jest pomoc dotycząca zapytań SQL Select
- 19. Metoda IPAddress.GetAddressBytes() - jaka kolejność bajtów?
- 20. Rejestrowanie zapytań NHibernate SQL
- 21. Dołącz dwóch zapytań SQL
- 22. Jaka jest wartość domyślna dla członków klasy C++?
- 23. Jaka jest domyślna częstotliwość animacji klawiatury telefonu iPhone?
- 24. Jaka jest domyślna nazwa pola tekstowego dla Summernote?
- 25. Jaka jest domyślna wartość atrybutu "position" dla DIV?
- 26. Jaka jest wartość domyślna (IEnumerable <T>)?
- 27. Jaka jest domyślna lista stopwords użytych w StopFilter Lucene?
- 28. Jaka jest domyślna rodzina czcionek w systemie Android?
- 29. Jaka jest domyślna wartość ConnectTimeout w ciągu połączenia?
- 30. Jaka jest domyślna ścieżka do bazy danych dla MongoDB?
Wierzę, że zależy to od silnika magazynu i potencjalnie indeksów. – smp7d
Pomocne odpowiedzi można znaleźć w podobnych pytaniach, takich jak [najlepsza praktyka SQL dotycząca domyślnego porządku sortowania] (http://stackoverflow.com/questions/1793147/sql-best-practice-to-deal-with-default-sort -order) i [kolejność wierszy MySQL dla "SELECT * FROM table_name;"] (http://stackoverflow.com/questions/1949641/mysql-row-order-for-select-from-table-name). – Wiseguy