database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 6677 게시물 읽기
No. 6677
WITH(NOLOCK) 요...
작성자
초보입니다.(fightinggood)
작성일
2013-06-05 16:12
조회수
9,894

 안녕하세요..

늘 어려움이 생기면 이곳에 글을 남기게 되네요..ㅠㅠ

이번에는 with(nolock) 때문에요...

기존에 쿼리가 있는데요.. 어려운쿼리는 아니고 간단한 selelct , insert, update 입니다.

그런데 이 3가지 쿼리가 빈번하게 발생하네요.. 하나의 테이블에서요..

A 라는 테이블이라고 하면

우선 A 테이블의 해당일자의 데이터를 다지우고  전일자의 내용을 계산에서 인서를 하고 다시 각 조건에 맞게

A테이블의 내역을 업데이트 합니다.

이게 시작이구요.. 

다른테이블을 조회해와서 A테이블의 내용이 있으면 for 문을 돌면서

업데이트 없으면 인서트 하는데.

이런 구문이 4개가 있고.

마지막에는 A테이블에 입력된 해당일자의 수량을 +,- 를 거쳐 조회된 내역을

다시 for 문을 돌면서 업데이트 하게 됩니다.

그런데 A테이블을 조회 하는 곳에서 중간 중간 with(nolock) 이 걸려 있구요.

조회 하는 전체쿼리에 걸려 있지는 않습니다.

(예로 selelct 구문이 5개 있다고 하면 3개는 걸려 있고 2개는 없습니다.)

인서트나 업데이트 구문에는 걸려 있지 않구요..

제가 이런 질문을 하게 된 이유는 

select 하는 쿼리에 제가 case 문을 하나 추가 했습니다.

위에서 말한 다른 테이블 내용을 조회 할때 필요해서요..

그런데 다른 쿼리는 그대로 인데 실행을 하면.. 보통 한달정도 일자를 주고 돌려도 15분이면 끝나던 쿼리가 

1시간이 넘게 걸리네요.. case 문을 추가 한거 말고는 없는데요.. ㅠㅠ

case 문 추가 하였다고 해서 이렇게 오래 걸리지는 않을것 같구요..

with(nolcok) 이게 문제 인가해서요..

궁금하네요..

수고하세요~!

 

이 글에 대한 댓글이 총 3건 있습니다.

 case 문을 추가해서 시간이 늘어진다면 case문을 의심해야지 왜 엉뚱한 WITH(NOLOCK)을 의심하시나요? ㅋㅋ

Occam's Razor

질문이 두루뭉술하니 답변도 두루뭉술하게 나갑니다~~~

 

for문을 돌면서 업데이트 없으면 인서트 -> merge로 한 방 쿼리로 하세요.

조회된 내역을 다시 for문을 돌면서 업데이트 하게 됩니다. -> for문 안돌고 될거 같은데요...

with(nolock)은 dirty read를 허용하는 table hint입니다. 여기 참조

만약 case 문 안에서 select 등이 일어난다면 시간이 몇 배로 늘어나는 것이 너무 당연할 수 있습니다.

 

 

우욱님이 2013-06-05 17:27에 작성한 댓글입니다. Edit

 네.. 

제가 글을 쓰고도 내용이 좀 그렇긴 하더라구요.

그런데 글로써 설명 할려고 했더니.. 이렇게 밖에 안되어서요..ㅠㅠ

그리고 제가 추가한 케이스문입니다.

case when 컬럼 in ('컬럼내용1','컬럼내용2','컬럼내용3') then '컬럼5' else 컬럼 end

이렇게만 추가 하였습니다..

초보입니다.(fightinggood)님이 2013-06-05 17:41에 작성한 댓글입니다.

짐작이지만 컬럼내용1, 컬럼내용2 등으로 case 문에 사용된 컬럼들이 index에 없음으로 인해 lookup이 발생하여 속도가 저하되지 않나 싶습니다.

우욱님이 2013-06-08 11:49에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
6681쿼리문 질문좀 드리겠습니다.^^ [1]
SH
2013-06-14
7527
6679MS-SQL 해당년도 주(week) 구하기 [2]
홍길동
2013-06-11
8704
6678시작 날짜와 종료 날짜 기간 동안의 특정 시간대의 데이터 검색 [2]
궁금이
2013-06-11
10890
6677WITH(NOLOCK) 요... [3]
초보입니다.
2013-06-05
9894
6676csv 파일 import 시키는 방법 문의 [1]
김상철
2013-06-04
10288
6675dvd대여프로그램을 만들고있는데 질문있습니다. [2]
김순인
2013-06-02
8091
6674(초보적인 질문) VIEW ===> 기본키(PK) 설정이 가능한가요.. [1]
김승철
2013-05-29
8276
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.048초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다