키가 없는 table 정렬 0 2 5,616

by 준일정 [SQL Query] mssql sql oracle mysql [2019.05.20 15:09:44]


질문01.---------------------------------------------------------------

제가 알기로는 

키가 하나인 테이블을 그냥  select만 했을 시 

기본 정렬이 key값의 오름차순 정렬되는걸로 알고 있습니다. 

이것이 사실인가요? 

-----------------------------------------------------------------------

 

 

질문02.---------------------------------------------------------------

만일 키가 없는 테이블을 그냥 select 시 

os환경에 따라 정렬 값이 달라지나요?

(즉, select 할 때 마다 정렬값이 달라 지는가?)

(이 질문을 한 이유는 temp테이블 생성시 key을 안주었을 때 

어떤 영향을 받을 지 궁금해서 질문을 올립니다.)

-----------------------------------------------------------------------

by 르매 [2019.05.20 15:42:41]

오라클은 잘 모르겠고, MS-SQL과 MySQL 기준으로 말씀드리면..

1. 꼭 그렇지는 않습니다.
테이블을 스캔했을 때 Key (아마 PK겠죠?) 가 Clustered Index라면 인덱스의 정렬 옵션 (ASC or DESC) 대로 나올 겁니다. (MySQL은 항상 오름차순 / MS-SQL은 특정 버전 이상인 경우에만 정렬 옵션대로?)

다만, MS-SQL은 PK가 Non-Clustered Index일 수 있는데.. 이렇게 Clustered가 없는 힙 테이블이라면 순서를 예상하기 어렵고, Clustered 가 있다면.. PK와 관계없이 Clustered Index가 잡힌 컬럼 순서대로 나올 겁니다.

MySQL은 어차피 모든 PK가 Clustered Index이니.. 그냥 Key 오름차순으로 나올테구요.

2. MS-SQL에서 키나 인덱스가 전혀 없다면.. 기본적으로는 입력한 순서대로 나오는 걸로 압니다. 다만, 운영환경에서 페이지 Split이나 fill factor 변경 등의 이유로.. 정렬 순서가 바뀔 수는 있겠군요. 다만, 말씀하신 것처럼 특정 세션에서 임시 테이블을 사용하는 경우라면.. 어지간해서 정렬 순서가 바뀌진 않을 듯 하네요.

MySQL은 키나 인덱스를 생성하지 않아도 내부적으로 정수 필드를 만들어 Clustered Index를 생성하기 때문에.. INSERT 한 순서대로 나올 겁니다.
 


by 마농 [2019.05.20 15:49:46]

1. 키 순서대로 정렬되는가?
 - 오라클의 경우 정렬 안되구요.
 - mssql 이나 mysql 의 경우 클러스터 테이블인 경우 정렬이 되는 걸로 압니다.
 - 다만 정렬이 된다고 맹신하면 안될 듯 합니다.
2. select 마다 정렬이 달라지는가?
 - 키값으로 정렬된다는 보장은 없습니다.
 - 다만 조회할때마다 다른 정렬결과가 나오는 건 아니죠.
3. 결론은
 - 정렬을 원한다면 ORDER BY 구문을 넣어 주시면 됩니다.
 - ORDER BY 없이 정렬된 결과를 보장해주길 바라면 안됩니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입