Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Редът на оператор SQL Select без клауза Order By

Не, на това поведение не може да се разчита. Редът се определя от начина, по който плановникът на заявки е решил да изгради набора от резултати. прости заявки като select * from foo_table вероятно ще бъдат върнати в реда, в който са съхранени на диска, който може да бъде в ред на първичен ключ или в реда, в който са създадени, или друг произволен ред. по-сложни заявки, като select * from foo where bar < 10 вместо това може да бъде върнат в ред на различна колона, въз основа на прочетено индексиране, или по реда на таблицата, за сканиране на таблица. още по-сложни заявки, с множество where условия, group by клаузи, union s, ще бъде в какъвто и ред, който планиращият реши, че е най-ефективен за генериране.

Редът може дори да се промени между две идентични заявки само поради данни, които са се променили между тези заявки. клауза „където“ може да бъде удовлетворена при сканиране на индекс в една заявка, но по-късните вмъквания биха могли да направят това условие по-малко селективно и планиращият може да реши да изпълни последваща заявка с помощта на сканиране на таблица.

За да постави по-фина точка върху него. RDBMS системите имат мандат да ви дадат точно това, което поискахте, възможно най-ефективно. Тази ефективност може да приеме много форми, включително минимизиране на IO (както към диска, така и през мрежата за изпращане на данни до вас), минимизиране на CPU и поддържане на малкия размер на работния му набор (използвайки методи, които изискват минимално временно съхранение).

без ORDER BY клауза, няма да сте попитали точно за определен ред и така RDBMS ще ви даде тези редове в някакъв ред, който (може би) съответства на някакъв случаен аспект на заявката, въз основа на кой алгоритъм RDBMS очаква да произведе данните най-бързо.

Ако ви е грижа за ефективността, но не и за поръчката, пропуснете ORDER BY клауза. Ако ви е грижа за реда, но не и за ефективността, използвайте ORDER BY клауза.

Тъй като всъщност ви е грижа за ДВЕТЕ използвайте 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. Какво е логически оператор И в SQL Server - SQL Server / TSQL урок, част 120

  2. Не можа да се намери съхранена процедура 'dbo.aspnet_CheckSchemaVersion'

  3. Речник на заявките на SQL Server — Стик за промяна за DBA

  4. Как да конвертирате стойностите на редовете в колони с динамичен брой колони?

  5. Връщане на привилегии на таблица от свързан сървър в SQL Server (T-SQL примери)