Domyślne sortowanie tabeli w MySQL

Po czym są sortowane domyślnie rekordy w tabelach MySQL?


Na przykład:
Tabela składa się z kilku kolumn w tym pierwsza kolumna id z opcją auto_increment.
Posiada około 1000-2000 rekordów (ale to nie ma znaczenia).
Rekordy dodawane są jeden po drugim bez późniejszej ingerencji w pole id.
Czasami rekordy są usuwane z tabeli.

I jak chcę wyświetlić wszystkie rekordy bez parametru ORDER BY to kilka rekordów nie są w kolejności według kolumny id ani według daty dodania rekordu ani według daty modyfikacji rekordu.

Więc według czego są sortowane??

  • Domyślny porządek sortowania zależy od implementacji tego, jak są przechowywane rekordy. Standardowo (tzn. dla tabel MyISAM), jeżeli na tabeli nie było nigdy żadnych operacji DELETE albo UPDATE, to SELECT bez ORDER BY zwróci rekordy w kolejności wstawienia. Jeżeli coś się zmieniało, rekordy fizycznie zmieniały położenie w pliku bazy danych, albo powstawały dziury które były potem zapełniane, to kolejność może być nieco zamieniona i to jest chyba to, co obserwujesz w swoim przypadku.

    W przypadku tabel InnoDB, które używają indeksów klastrowanych dla klucza głównego (a zatem klucz główny wyznacza fizyczny porządek rekordów na dysku), SELECT bez ORDER BY zawsze da uporządkowanie wg klucza głównego. Ale to wynika jedynie ze szczegółów implementacyjnych, nie jest żadną regułą w sensie ogólnym.

  • To po jakim polu ma być sortowana tabela można ustawić za pomocą zapytania SQL:

    ALTER TABLE `nazwa_tabeli`  ORDER BY `pole_tabeli_po_ktorym_sortujemy`
    ALTER TABLE `nazwa_tabeli`  ORDER BY `pole_tabeli_po_ktorym_sortujemy` DESC
    

    Można to również zrobić w phpMyAdmin:

    1. Wybieramy tabele
    2. Zakładkę "Operacje"
    3. Korzystamy z formularza "Sortowanie tabeli wg"

    .

Zaloguj się, aby dodać swoją odpowiedź