prosource

'선택'은 항상 기본 키로 정렬됩니까?

probook 2023. 6. 22. 21:58
반응형

'선택'은 항상 기본 키로 정렬됩니까?

여러분 모두를 위한 기본적인 간단한 질문입니다.

선택을 할 때 결과가 항상 기본 키에 의해 정렬되도록 보장됩니까? 아니면 '주문 기준'으로 지정해야 합니까?

저는 Oracle을 DB로 사용하고 있습니다.

아니요, "주문 기준"을 사용하지 않으면 어떤 주문도 보장되지 않습니다.실제로 한 쿼리에서 다음 쿼리로 이어지는 순서가 동일하다는 보장은 없습니다.SQL은 세트 기반 방식으로 데이터를 처리합니다.데이터베이스 구현 중 하나 또는 다른 하나가 특정한 방식으로 주문을 제공할 수 있지만 절대로 이에 의존해서는 안 됩니다.

선택을 할 때 결과가 항상 기본 키에 의해 정렬되도록 보장됩니까? 아니면 '주문 기준'으로 지정해야 합니까?

아니요, 그것은 절대로 보장되지 않습니다.

SELECT  *
FROM    table

아마 사용할 것입니다.TABLE SCAN기본 키를 전혀 사용하지 않습니다.

힌트를 사용할 수 있습니다.

SELECT  /*+ INDEX(pk_index_name) */
        *
FROM    table

하지만 이 경우에도 주문은 보장되지 않습니다: 만약 당신이 사용한다면.Enterprise Edition쿼리가 병렬화될 수 있습니다.

이것은 문제입니다, 왜냐하면ORDER BY에서 사용할 수 없습니다.SELECT절 하위 쿼리에서는 다음과 같은 내용을 쓸 수 없습니다.

SELECT  (
        SELECT  column
        FROM    table
        WHERE   rownum = 1
        ORDER BY
                other_column
        )
FROM    other_table

아니요, ORDER BY를 사용하지 않는 한 주문이 보장되지 않습니다.

행을 가져오는 순서는 액세스 방법(예: 전체 테이블 검색, 인덱스 검색), 테이블의 물리적 특성, 테이블 내 각 행의 논리적 위치 및 기타 요인에 따라 달라집니다.쿼리를 변경하지 않더라도 모두 변경될 수 있으므로 결과 집합에서 일관된 순서를 보장하려면 ORDER BY가 필요합니다.

이는 DB에 따라 다르며 색인된 필드에 따라 다릅니다.

예를 들어 내 표의 사용자는 모든 사용자가 고유한 varchar(20) 필드(로그인) 및 기본 키 ID를 가집니다.

그리고 "Select * from users"는 로그인별로 정렬된 행 집합을 반환합니다.

특정 주문을 원하는 경우 ORDER BY를 사용하여 구체적으로 선언합니다.

테이블에 기본 키가 없으면 어떻게 합니까?

결과를 특정 순서로 지정하려면 항상 다음 순서로 지정합니다.

언급URL : https://stackoverflow.com/questions/824855/does-select-always-order-by-primary-key

반응형