[SQL] 항상합니까 '선택'프라이 머리 키를 기준으로 순서?
SQL항상합니까 '선택'프라이 머리 키를 기준으로 순서?
당신 DBA 모두를위한 기본적인 간단한 질문입니다.
내가 선택 할 때 항상 내 결과는 기본 키에 의해 정렬됩니다 보장, 또는 나는 '로 순서'로 지정해야?
내 DB로 오라클을 사용하고 있습니다.
해결법
-
==============================
1.당신이 "에 의해 순서를"사용하지 않으면 아니, 당신은 어떤 주문 전혀 보장되지 않습니다. 사실, 당신은 다음에 하나 개의 쿼리에서 순서가 동일하게 나타날 것이라고는 보장 할 수 없습니다. SQL은 집합 기반 방식으로 데이터를 다룰 것을 기억하십시오. 이제, 하나의 데이터베이스 구현 또는 다른 특정 방식으로 순서 부를 제공하기 위해 발생할 수 있지만, 당신은에 의존해서는 안됩니다.
당신이 "에 의해 순서를"사용하지 않으면 아니, 당신은 어떤 주문 전혀 보장되지 않습니다. 사실, 당신은 다음에 하나 개의 쿼리에서 순서가 동일하게 나타날 것이라고는 보장 할 수 없습니다. SQL은 집합 기반 방식으로 데이터를 다룰 것을 기억하십시오. 이제, 하나의 데이터베이스 구현 또는 다른 특정 방식으로 순서 부를 제공하기 위해 발생할 수 있지만, 당신은에 의존해서는 안됩니다.
-
==============================
2.아니, 지금까지 보장하지 않음으로써입니다.
아니, 지금까지 보장하지 않음으로써입니다.
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
-
==============================
3.당신이 BY 주문을 사용하지 않는 한, 주문이 보장되지 않습니다.
당신이 BY 주문을 사용하지 않는 한, 주문이 보장되지 않습니다.
행이 페치되는 순서는 접속 방식 (예를 들어, 전체 테이블 스캔 인덱스 스캔), 테이블의 물리적 속성 테이블 내의 각 행의 논리적 위치, 및 기타 요인에 의존한다. 이들은 당신이 그래서 당신의 결과 집합에 일관된 순서를 보장하기 위해, 쿼리를 변경하지 않는 경우에도 모든 변화가 ORDER BY가 필요 할 수 있습니다.
-
==============================
4.그것은 당신의 DB에 의존하고 또한 인덱싱 된 필드에 따라 달라집니다.
그것은 당신의 DB에 의존하고 또한 인덱싱 된 필드에 따라 달라집니다.
로그인 및 기본 키 - - ID 예를 들어, 내 테이블 사용자의 모든 사용자는 고유의 VARCHAR (20) 필드가 있습니다.
그리고 반환 "사용자의 선택 *는"로그인에 의해 주문 행 집합.
-
==============================
5.특정 순서를 원하는 경우, 특히 ORDER BY를 사용하여 선언합니다.
특정 순서를 원하는 경우, 특히 ORDER BY를 사용하여 선언합니다.
어떤 테이블은 기본 키가없는 경우?
-
==============================
6.특정 순서로 결과를 원하는 경우, 항상하여 순서를 지정
특정 순서로 결과를 원하는 경우, 항상하여 순서를 지정
from https://stackoverflow.com/questions/824855/does-select-always-order-by-primary-key by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] bind_param은 무엇을 수행합니까? (0) | 2020.05.26 |
---|---|
[SQL] 무엇 외래 키 불일치 오류를 일으키는? (0) | 2020.05.26 |
[SQL] 어떻게 SQL 수평 데이터로 수직 데이터를 변환하는? (0) | 2020.05.26 |
[SQL] 어떻게 SQLite는 지난 삽입 ID를 얻으려면? (0) | 2020.05.26 |
[SQL] SQL 방법은 하나의 공백으로 반복 공백을 대체 (0) | 2020.05.26 |