programing

SQL행반납순서

telebox 2023. 10. 9. 22:28
반응형

SQL행반납순서

저는 SQL을 매일 사용하기 시작한 최근까지 거의 사용하지 않았습니다."주문 기준" 조항이 사용되지 않는 경우 다음을 확인합니다.

  1. 표의 일부를 선택할 때 반환되는 행이 전체 표를 선택하면 나타나는 순서와 동일하게 나타납니다.
  2. 조인에서 선택한 행이 반환되는 순서는 조인의 가장 왼쪽 멤버에 의해 결정되는 것으로 보입니다.

이 동작은 가장 일반적인 데이터베이스(MySql, Oracle, Postgre)에서 신뢰할 수 있는 표준 동작입니까?SQL, Sqlite, Sql Server)?(실제로 sqlite에 의지할 수 있는지조차 모르겠습니다.)(예를 들어 "그룹 단위"를 사용할 경우 각 그룹은 해당 순서를 가질 수 있습니까?) 그렇다면 얼마나 엄격하게 예우됩니까?

쿼리에 ORDER BY 절이 포함되어 있지 않으면 반환된 행 순서가 정의되지 않습니다.

일부 RDB를 사용하는 동안MSes는 일부 상황에서 특정 순서로 행을 반환합니다. 심지어 ORDER BY 절이 누락된 경우에도 이러한 동작을 절대로 의존해서는 안 됩니다.

SQL-92 규격의 섹션 20.2 <직접 선택 문: 다중 행>, 섹션 "일반 규칙":

4) <조항별 순서>를 지정하지 않은 경우, 다음 순서는Q의 행은 구현에 의존적입니다.

주문을 원하시는 경우, 다음을 포함합니다.ORDER BY. 만약 당신이 포함하지 않는다면,ORDER BY SQL Server

어떤 순서로 행을 돌려주든 상관없어요, 그냥 행을 돌려주세요.

신경쓰지 않아도 되므로 SQL Server는 현재 가능한 한 가장 효율적인 방법으로(또는 이 특정 쿼리에 대한 계획이 캐시된 마지막 시간에 따라) 행을 반환하는 방법을 결정할 것입니다.따라서 관찰하는 행동에 의존해서는 안됩니다.데이터 변경, 통계 변경, 인덱스 변경, 서비스 팩, 누적 업데이트, 업그레이드 등을 통해 한 번의 쿼리 실행에서 다음 쿼리로 변경할 수 있습니다.

Postgre의 SQL, 만약 당신이 다음을 생략한다면ORDER BY되지 않는 한 쿼리를 한 번 할 수 를 100다.사실, 각 실행 순서가 다를 수 있습니다.

이 문제가 발생할 수 있는 한 가지 이유는 선택한 계획에 테이블 힙에 대한 순차적 검색이 포함되어 있는데, 이미 해당 테이블 힙에 대한 시퀀스 검색이 진행 중인 경우, 다른 검색이 이미 진행 중인 지점에서 쿼리가 검색을 시작하여 디스크 액세스의 필요성을 줄이기 때문입니다.

다른 답변에서도 지적한 바와 같이 데이터를 특정 순서로 지정하려면 해당 순서를 지정합니다.포스트그레SQL은 계획을 선택할 때 요청된 순서를 고려하고, 행을 다른 방식으로 얻은 후 정렬하는 것보다 비용이 적게 들 경우 해당 순서대로 데이터를 제공하는 인덱스를 사용할 수 있습니다.

GROUP BY순서를 보장하지 않음; PostgreSQL은 그룹화를 수행하기 위해 데이터를 정렬하거나 해시 테이블을 사용하고 해시 알고리즘에 의해 생성된 숫자의 순서대로 행을 반환할 수 있습니다(예: 상당히 랜덤).그리고 그것은 한 번의 실행에서 다음 실행으로 바뀔 수 있습니다.

제가 DBA였을 때 SQL의 이러한 기능이 종종 별난 것으로 여겨졌다는 사실에 놀라움을 금치 못했습니다.텍스트 파일에 대해 실행되고 일부 출력을 생성하는 간단한 프로그램을 생각해 보십시오.프로그램이 변경되지 않고 데이터가 변경되지 않으면 출력이 변경되지 않을 것으로 예상됩니다.

이에 관해서는:

쿼리에 ORDER BY 절이 포함되어 있지 않으면 반환된 행 순서가 정의되지 않습니다.

엄밀하게 그렇지는 않습니다. 제가 작업해본 모든 RDBMS(Oracle, Informix, SQL Server, DB2 등)에서 DISTINCT 절은 정의에 따라 고유한 값을 찾는 것과 같은 효과가 있습니다.

편집(6/2/14):

간단한 표 만들기

enter image description here

DISTINCT 및 ORDER BY의 경우 표면적으로 동일한 작업이기 때문에 계획 및 비용이 모두 동일합니다.

enter image description here

enter image description here

당연히 그 효과는 똑같습니다.

enter image description here

언급URL : https://stackoverflow.com/questions/10418218/sql-row-return-order

반응형