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하고 있어서 무제한으로 데이타가 늘지는 않습니다
MSSQL은 기본적으로 SELECT 시에 공유잠금이 걸린다. 즉, SELECT 문이 수행되는 테이블에 대해서 INSERT,UPDATE, DELETE 문이 수행되고 있다면 SELECT문은 선행 작업이 모두 끝날때까지 LOCK이 걸린다. 이때 SELECT 문에 WITH (NOLOCK)을 추가하면 선행작업의 결과와 관계없이 바로 SELECT문이 수행되어서 결과를 반환하게 된다.
제 생각에는 위 상황과 NOLOCK 문제는 별 상관이 없는게 아닐런지요? 그리고 결합인덱스 컬럼의 순서가 바뀌어야 TOP 질의에서 더 빨리 되지 않는지요?
FieldA 인게 반드시 항상 나오는 조건이며 Equal(=) 비교가 아닐경우라면 바꾸시는게?