복붙노트

[SQL] 기본 정렬 순서를 다루는 SQL 모범 사례

SQL

기본 정렬 순서를 다루는 SQL 모범 사례

개발자가 기본 정렬 순서는 항상 보유하고 있다고 가정처럼 내가 읽은 SQL 코드의 많은 것 같습니다. 예를 들어 ORDER BY 절을 발행하지 않고 테이블에서 HTML을 선택 그들은 단지 ID를 선택 할 목록, 이름을 만들 때.

내 자신의 경험에서 BY 절에는 ORDER가 주어지지와 인덱스 경우 FIFO를 사용하여 DBMS 항상 곁에 주문 데이터처럼 보인다. 그러나, 순서는 보장되지 않습니다. 하지만 데이터 테이블이 경우 어떤 변화를 재정렬 DBMS를 본 적이 없다.

혹시 테이블에 변화가없는 경우 비 결정적 순서로 데이터를 선택하는 DBMS를 경험 한 적이 있습니까?

항상 ORDER BY 절을 넣어 가장 좋은 방법은 있습니까?

해결법

  1. ==============================

    1.디폴트 정렬 순서가 없습니다. 테이블이 클러스터 된 인덱스가하더라도, 당신은 순서대로 결과를 얻을 보장되지 않습니다. 특정 순서를 원하는 경우 order by 절을 사용해야합니다.

    디폴트 정렬 순서가 없습니다. 테이블이 클러스터 된 인덱스가하더라도, 당신은 순서대로 결과를 얻을 보장되지 않습니다. 특정 순서를 원하는 경우 order by 절을 사용해야합니다.

  2. ==============================

    2.정렬 순서를 지정하지 않은 경우 다른 포스터가 언급으로, SQL 표준은 결과가 무엇에 쿼리 프로세서는 대부분의 편법하고 효율적인을 찾아 주문이 될 수 있다고 말한다.

    정렬 순서를 지정하지 않은 경우 다른 포스터가 언급으로, SQL 표준은 결과가 무엇에 쿼리 프로세서는 대부분의 편법하고 효율적인을 찾아 주문이 될 수 있다고 말한다.

    하자는 더 인덱스와 기본 키가없는 고객 테이블의 모든 행에 대한 간단한 정렬되지 않은 SELECT을 말한다. 이 쿼리 프로세서가 직선 테이블 스캔을하고 원래 (당신이 본 FIFO 동작을 제공) 삽입 된 순서대로 열을 생산하는 것, 심지어 가능성이 매우 가능합니다.

    당신이 다음 (순서대로) 국가 및 도시 필드에 대한 인덱스, 다음 쿼리의 WHERE STATE = 'NY'를 추가하는 경우 쿼리 프로세서는 주를 위해 = 'NY'가 아니라에 인덱스 항목을 스캔하는 것이 더 효율적입니다 결정할 수 있습니다 전체 테이블 스캔을한다. 이 경우는 아마 STATE의 행, CITY 순서를 실현한다.

    심지어이 확실하지 않다. (데이터베이스가 알바니 기반 장비 임대 사업을 위해 어쩌면 때문에) 쿼리 프로세서가 테이블에있는 거의 모든 상태 값이 'NY'임을 보여주는 통계를 수집 한 경우 예를 들어, 테이블 스캔이 실제로 싼 것을 결정할 수있다 인덱스 스캔보다, 당신은 다시 FIFO를 볼 수 있습니다.

    그것은 당신의 데이터베이스가 쿼리를 계획하는 방법에 대한 몇 가지 기본을 배울 수있는 좋은 아이디어입니다. 당신은 당신의 DBMS가 크기 순서에 의해 일부의 경우, 쿼리를 최적화하기 위해 이것을 사용 후 특정 쿼리를 실행하고, 얼마나보기 위해 문을 EXPLAIN 사용할 수 있습니다. 이 배울 수있는 매력적이고 유용한 영역입니다.

  3. ==============================

    3.당신은 데이터가 지속적으로 주문 나올하려면, 예 - 당신은 ORDER BY를 사용해야합니다.

    당신은 데이터가 지속적으로 주문 나올하려면, 예 - 당신은 ORDER BY를 사용해야합니다.

  4. ==============================

    4.예. 주문 BY 없이는 "기본 순서"이 존재하지 않는다, 당신은 FIFO / LIFO 또는 다른 순서로 데이터를 다시 얻을 것이다 것이라는 보장은 없습니다.

    예. 주문 BY 없이는 "기본 순서"이 존재하지 않는다, 당신은 FIFO / LIFO 또는 다른 순서로 데이터를 다시 얻을 것이다 것이라는 보장은 없습니다.

    지금까지 개발자로 "테이블에서 SELECT ID, 이름"을 사용하여, 그들은 하나 무능 중이거나 그들에 어떤 순서로 아무것도 나타납니다 상관하지 않습니다.

  5. ==============================

    5.심각한 RDBMS는 BY 명시 적 ORDER를 지정하지 않는 한 임의의 순서를 보장하지 않습니다.

    심각한 RDBMS는 BY 명시 적 ORDER를 지정하지 않는 한 임의의 순서를 보장하지 않습니다.

    다른 건 순수한 행운이나 일화 - 당신은 순서를 원하는 경우, 당신은 ORDER BY를 지정할 필요가 없습니다 - 그 주위에 방법을.

  6. ==============================

    6.당신이 데이터를 정렬하려면, 보증 무엇이든 할 수있는 유일한 방법 ORDER BY 절을 포함하는 것입니다 (모든 주요 RDBMS 시스템과는 확실히는 SQL 서버와 오라클, 알고 있어요 있음). FIFO는 ORDER BY 절없이 반환 된 주문 데이터와는 전혀 무관하고, 기본 정렬 순서의 어떤 종류의 개념이 없다. 소위 기본 정렬 순서는 기본적으로 그러나 엔진 도착 될 수있는 데이터, 문자 그대로 인덱스, 캐시 된 데이터 동시 실행 쿼리, 서버의 부하 등 등을 기반으로 임의의 순서

    당신이 데이터를 정렬하려면, 보증 무엇이든 할 수있는 유일한 방법 ORDER BY 절을 포함하는 것입니다 (모든 주요 RDBMS 시스템과는 확실히는 SQL 서버와 오라클, 알고 있어요 있음). FIFO는 ORDER BY 절없이 반환 된 주문 데이터와는 전혀 무관하고, 기본 정렬 순서의 어떤 종류의 개념이 없다. 소위 기본 정렬 순서는 기본적으로 그러나 엔진 도착 될 수있는 데이터, 문자 그대로 인덱스, 캐시 된 데이터 동시 실행 쿼리, 서버의 부하 등 등을 기반으로 임의의 순서

    이 다른 유래 스레드는 기본적으로 SQL Server에 관련하여 동일한 개념을 덮고, AlexK는 동작을 보여주기 위해 REPO를 블로그.

  7. ==============================

    7.테이블에서 SELECT 같은 심지어 간단한 쿼리는 ... 다양한 순서로 데이터를 반환 할 수 있습니다. 나는이 실제로 사실을 알고,이 이론에서 사실로 알고 있고, 순서가 데이터 변경 테이블에서 발생없는 경우에도 후속 실행 사이에 변경 될 때 나는 경우를 많이 보았다.

    테이블에서 SELECT 같은 심지어 간단한 쿼리는 ... 다양한 순서로 데이터를 반환 할 수 있습니다. 나는이 실제로 사실을 알고,이 이론에서 사실로 알고 있고, 순서가 데이터 변경 테이블에서 발생없는 경우에도 후속 실행 사이에 변경 될 때 나는 경우를 많이 보았다.

    쿼리 병렬 계획을 사용하여 실행될 때 실행 간의 순서 변경의 전형적인 예이다. 기본 스레드를 병렬로 생성 연산자는 데이터를 리턴하기 때문에, 결과의 행의 순서는 각각의 실행 사이에서 변한다. 이러한 상황은 예를 들어 답례 때마다 실행 격렬하게 다른 결과를도 간단한 선택을합니다.

  8. ==============================

    8.레코드 세트는 동적 정렬이 지원하는 "클라이언트 측"격자 형 제어 등으로 표시되기 때문에 SQL 내 경험에 의하면, 대부분의 시간에 나는, SQL에 의해 질서를 지정하지 않은 - SQL에 의해이 경우 순서에 어쨌든 클라이언트 측을 확인하므로 필요도 없다.

    레코드 세트는 동적 정렬이 지원하는 "클라이언트 측"격자 형 제어 등으로 표시되기 때문에 SQL 내 경험에 의하면, 대부분의 시간에 나는, SQL에 의해 질서를 지정하지 않은 - SQL에 의해이 경우 순서에 어쨌든 클라이언트 측을 확인하므로 필요도 없다.

    동일한 쿼리가 다른 순서에서 다른 장소에 데이터를 표시하는 데 사용할 수 있기 때문에 이것은 또한 클라이언트 측 이루어집니다.

    따라서 그것은 ORDER BY에 넣어 만 가장 좋은 방법은, 때

    전단 현상이 될 것 경우, 즉 그 가능성 전체적인 처리 시간을 단축하도록 어쨌든 후, 소용이없는 "재 분류".

  9. ==============================

    9.아마도 그 SQL 쿼리의 작가 넌 독서는 반환 된 데이터의 순서에 대해 걱정하지 않는다. 가장 좋은 방법은 당신이 반환 된 결과의 순서를 보장하기 위해 필요로하는 곳에 사용하는 것입니다!

    아마도 그 SQL 쿼리의 작가 넌 독서는 반환 된 데이터의 순서에 대해 걱정하지 않는다. 가장 좋은 방법은 당신이 반환 된 결과의 순서를 보장하기 위해 필요로하는 곳에 사용하는 것입니다!

  10. ==============================

    10.누군가가 내가 한로 사용하려는 경우 나는 경우에이 쓰고 있어요.

    누군가가 내가 한로 사용하려는 경우 나는 경우에이 쓰고 있어요.

    글쎄, 난 만족 기본 정렬 순서를 얻고,하자 지수에 종류와 로그 테이블에 대해 말한다. 예를 들어 나는 순서로 날짜 시간 DESC을 할 수 있도록 로그 테이블 (LIFO)의 마지막 행에서 일반적으로 관심이 있어요. 또한 기본 키 옆에있는 다른 필드 (정수)에 인덱스를 추가하는 재미를 위해 시도하고 일했다.

    CREATE TABLE [dbo].[tableA]([DateTime] [datetime] NOT NULL,
    CONSTRAINT [PK_tableA] 
    PRIMARY KEY CLUSTERED ([DateTime] DESC)
    WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, 
    ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]
    

    또는 SSMS에서 ...

  11. from https://stackoverflow.com/questions/1793147/sql-best-practice-to-deal-with-default-sort-order by cc-by-sa and MIT license