'선택'은 항상 기본 키로 정렬됩니까?
여러분 모두를 위한 기본적인 간단한 질문입니다.
선택을 할 때 결과가 항상 기본 키에 의해 정렬되도록 보장됩니까? 아니면 '주문 기준'으로 지정해야 합니까?
저는 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
'prosource' 카테고리의 다른 글
Git LFS 트랙 폴더 재귀 (0) | 2023.06.22 |
---|---|
libclntsh.so .11.1: 공유 개체 파일을 열 수 없습니다. (0) | 2023.06.22 |
Scikit 학습 데이터 세트를 Panda 데이터 세트로 변환하는 방법 (0) | 2023.06.22 |
CPU에서 Tensorflow를 실행하는 방법 (0) | 2023.06.22 |
git 자동 커밋 만들기 (0) | 2023.06.22 |