사이트 내 전체검색
PHP
[PHP] order by 없이 정렬 가능한가
로빈아빠
https://cmd.kr/php/653 URL이 복사되었습니다.

본문

질문1. order by가 시스템에 어떤식으로 부하를 주는지요 (예 풀스캐닝을 해서 다시정렬..)

아시는 것처럼 조건절에 맞는 데이타를 읽어 온 후 그 데이타를 스캔하여 다시 정렬을 하게 됩니다.


저도 튜닝을 하면서 알게 된 여러가지 사실 중에 한가지가 인덱스나 불필요한 ORDER BY가 없어도 쿼리 성능을 훨씬 증가 할수 있다는 사실을 알게 되었습니다.

여담으로 BOARD 테이블에 NUM이 기본키로 설정되어 있는경우, NUM은 자동으로 오름차순으로 되어 있습니다.

1. select top 10 * from board order by num desc
NUM에 걸린 인덱스에서 내림차순으로 변경하여

2. select top 10 * from board
로 쿼리를 던지고 실행계획을 보면 같습니다.

1번 쿼리가 정렬을 하기 때문에 시간이 더 오래 걸릴 것 같지만
1번 쿼리의 경우 옵티마이져가 DESC를 먼저 간파하여 인덱스를 역순으로 읽어서 가져오게 되기 때문입니다.

이와 같이 어떤 환경이냐, 어떤 필드를 조회 하느냐에 따라 반드시 이렇다 저렇다 말할수는 없습니다.

일반적으로 재 정렬하는 것은 피하는것이 좋고 상황에 따라 튜닝하시는 것이 좋습니다.

(옵티마이져는 진화합니다. 항상 같으 방법으로 조회하지만도 않습니다.)

질문2. select 글의번호, 글의 순서, 글의 가치 from table_name where order by 글의 가치 desc, 글의 순서 desc; <== 이쿼리를 order by를 빼고 정렬할수있는지요?

인덱스 생성 시 필드 명 다음에 ASC, DESC 를 사용하게 됩니다.
일반적으로 이부분을 생략하게 되면 ASC로 자동 선택되는 것을 알고 계실 겁니다.
그래서 아래와 같이 인덱스 생성 시 내림차순 정렬을 할 필드에 각각 DESC 를 써주시면 됩니다.

CREATE  INDEX [INDEX_NAME] ON [dbo].[table_name]([글의가치] DESC , [글의순서] DESC) ON [PRIMARY]


출처 : http://kin.naver.com/detail/detail.php?d1id=1&dir_id=10110&eid=zdsN2nSVTzG8URrIh4qbvycuusheuyHU&qb=b3JkZXIgYnk=&pid=f7Re%2Bwoi5Twssb7IpAZsss--306674&sid=SLTPX57EtEgAAAFkIZs 

댓글목록

등록된 댓글이 없습니다.

PHP
871 (7/18P)

Search

Copyright © Cmd 명령어 3.137.160.137