MS-SQL TOP 속도 질문드려요 0 3 4,026

by 리오 [DB 기타] mssql top [2014.04.21 13:33:22]


DataBase는 MS-SQL입니다.

 

Insert가 빈번하게.. 아니 1초에 보통 5개 Row를 Insert하는 테이블을 Desc해서 최근 50 Row만 가져오려고 하고 있습니다.

Select를 하면 보통 0.11초정도 걸리는데.. 가끔 아니 자주 3초정도가 걸려서 문제가 발생되고 있습니다.

해결 방법이 있는지요..

 

쿼리는 아래와 같이 시간Desc해서 top 50으로 Select하고 있습니다.

select Top 50 TimeField, FieldA, FieldB from Table where FieldA='A' order by TimeField Desc

 

참고로 이 테이블은 하루마다 Truncate하고 있어서 무제한으로 데이타가 늘지는 않습니다

by 마농 [2014.04.21 13:57:40]

결합인덱스 생성 ( FieldA + TimeField )


by 리오 [2014.04.21 14:06:38]

인덱스도 생성했는데.. 자주 3초때가 나오네요 ㅠㅠ

FieldA + TimeField Desc 인덱스 생성 했는데.. 그래도 가끔 3초에 Select가 되네요..

찾아보니 MSSQL은 오라클과 달리 Select가 Nolock 아니라고 하는데.. 혹시 이부분땜에 그러는지 모르겠네요..

혹시나 해서 WITH (NOLOCK) 처리도 했는데..


by 롤초보 [2014.04.22 08:54:57]

MSSQL은 기본적으로 SELECT 시에 공유잠금이 걸린다. 즉, SELECT 문이 수행되는 테이블에 대해서 INSERT,UPDATE, DELETE 문이 수행되고 있다면 SELECT문은 선행 작업이 모두 끝날때까지 LOCK이 걸린다. 이때 SELECT 문에 WITH (NOLOCK)을 추가하면 선행작업의 결과와 관계없이 바로 SELECT문이 수행되어서 결과를 반환하게 된다.

제 생각에는 위 상황과 NOLOCK 문제는 별 상관이 없는게 아닐런지요? 그리고 결합인덱스 컬럼의 순서가 바뀌어야 TOP 질의에서 더 빨리 되지 않는지요?

FieldA 인게 반드시 항상 나오는 조건이며 Equal(=) 비교가 아닐경우라면 바꾸시는게?

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