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

Obliczanie SQL Server ROW_NUMBER() OVER() dla tabeli pochodnej

Row_Number() OVER (ORDER BY (SELECT 1)) sztuczka NIE być postrzegane jako sposób na uniknięcie zmiany kolejności podstawowych danych. Jest to tylko sposób na uniknięcie sytuacji, w której serwer wykonuje dodatkowe i niepotrzebne sortowanie (nadal może wykonywać sortowanie, ale będzie to kosztować minimalną możliwą kwotę w porównaniu z sortowaniem według kolumny).

Wszystkie zapytania na serwerze SQL Absolutnie MUSZĄ mieć ORDER BY w najbardziej zewnętrznym zapytaniu, aby wyniki były uporządkowane w sposób niezawodny i gwarantowany.

Pojęcie „zachowania pierwotnego porządku” nie istnieje w relacyjnych bazach danych. Tabele i zapytania należy zawsze uważać za nieuporządkowane do momentu, aż ORDER BY klauzula jest określona w najbardziej zewnętrznym zapytaniu.

Możesz wypróbować to samo nieuporządkowane zapytanie 100 000 razy i zawsze otrzymywać je w tej samej kolejności, a tym samym uwierzyć, że możesz polegać na tej kolejności. Ale to byłby błąd, bo pewnego dnia coś się zmieni i nie będzie miało takiej kolejności, jakiej oczekujesz. Jednym z przykładów jest aktualizacja bazy danych do nowej wersji SQL Server — spowodowało to zmianę kolejności wielu zapytań. Ale to nie musi być tak duża zmiana. Coś tak małego jak dodanie lub usunięcie indeksu może powodować różnice. I więcej:Instalacja dodatku Service Pack. Partycjonowanie tabeli. Tworzenie indeksowanego widoku zawierającego daną tabelę. Dotarcie do punktu krytycznego, w którym zamiast poszukiwania wybiera się skanowanie. I tak dalej.

Nie polegaj na wynikach, które mają zostać zamówione, chyba że powiedziałeś „Serwer, ORDER BY ".




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Klasyczny problem ASP z połączeniem ze zdalną bazą danych SQL Server

  2. Zwróć klucze podstawowe z połączonego serwera w SQL Server (przykłady T-SQL)

  3. Czy rozmiar używany z NVARCHAR ma znaczenie?

  4. SQL Server — Utworzyć kopię tabeli bazy danych i umieścić ją w tej samej bazie danych?

  5. Jak naprawić błąd 926 Microsoft SQL Server? — Rozwiązany