Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Kolejność instrukcji SQL Select bez klauzuli Order By

Nie, nie można polegać na tym zachowaniu. Kolejność zależy od sposobu, w jaki planista zapytań zdecydował o zbudowaniu zestawu wyników. proste zapytania, takie jak select * from foo_table prawdopodobnie zostaną zwrócone w kolejności, w jakiej są przechowywane na dysku, która może być w kolejności klucza podstawowego, kolejności, w jakiej zostały utworzone, lub innej losowej kolejności. bardziej złożone zapytania, takie jak select * from foo where bar < 10 zamiast tego mogą być zwracane w kolejności innej kolumny, na podstawie odczytanego indeksu lub kolejności tabeli w przypadku skanowania tabeli. jeszcze bardziej rozbudowane zapytania, z wieloma where warunki, group by klauzule, union s, będzie w takiej kolejności, w jakiej planista uzna, że ​​jest to najbardziej efektywne do wygenerowania.

Kolejność może nawet zmienić się między dwoma identycznymi zapytaniami tylko z powodu danych, które zmieniły się między tymi zapytaniami. Klauzula „where” może być spełniona podczas skanowania indeksu w jednym zapytaniu, ale późniejsze wstawienia mogą sprawić, że ten warunek będzie mniej selektywny, a planista może zdecydować się na wykonanie kolejnego zapytania przy użyciu skanowania tabeli.

Aby postawić na to dokładniejszy punkt. Systemy RDBMS mają obowiązek dawać ci dokładnie to, o co prosiłeś, tak skutecznie, jak to możliwe. Ta wydajność może przybierać wiele form, w tym minimalizację IO (zarówno na dysk, jak i przez sieć w celu wysłania danych do Ciebie), minimalizację procesora i utrzymywanie małego rozmiaru zestawu roboczego (przy użyciu metod, które wymagają minimalnego tymczasowego przechowywania).

bez ORDER BY klauzula, nie zapytasz dokładnie dla określonej kolejności, a więc RDBMS poda te wiersze w takiej kolejności, która (być może) odpowiada pewnemu przypadkowemu aspektowi zapytania, w oparciu o dowolny algorytm, który RDBMS spodziewa się wygenerować dane najszybciej.

Jeśli zależy Ci na wydajności, ale nie na porządku, pomiń ORDER BY klauzula. Jeśli zależy Ci na porządku, ale nie na wydajności, użyj ORDER BY klauzula.

Ponieważ tak naprawdę zależy Ci na OBU użyj ORDER BY a następnie dokładnie dostosuj zapytanie i bazę danych, aby były wydajne.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak usunąć spacje nierozdzielające z kolumny na serwerze SQL?

  2. SQL Server 2017:dostępne funkcje w systemie Linux

  3. 7 faktów na temat synonimów SQL Server, które powinieneś wiedzieć

  4. Jak odwoływać się do kluczy JSON zawierających znaki specjalne podczas korzystania z OPENJSON, JSON_QUERY i JSON_VALUE (SQL Server)

  5. Jak naprawić „wyrażenie EXECUTE nie powiodło się, ponieważ jego klauzula WITH RESULT SETS określono 2 kolumny dla zestawu wyników…” Msg 11537 w programie SQL Server