top of page

Update with Temp Table

회사에서 쿼리를 보던 중 WITH(NOLOCK)은 많이 보았지만 WITH(ROWLOCK)은 처음 보았다.

WITH(ROWLOCK)을 적어주게 되면 무조건 row lock을 하는것이 아니라 page lock이나 table lock으로 유도할 수 있다. 즉 WITH(ROWLOCK)이 권고, 힌트를 주는 것

UPDATE문

UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;

원래는 이런식으로 해주지만 튜닝을 해줄 때 TEMP TABLE에 넣어서 업데이트를 해주는 방법도 있다. 

UPDATE문은 파라미터에 따라 속도가 달라 질 수 있다 -> 속도차이가 발생하면 안되기 때문에 TEMP TABLE에 넣어서 업데이트를 해주는 방법도 있다.

table_name의 인덱스를 먼저 확인해서 아무거나 타는 것 같으면 SELECT에서 타야할 인덱스 힌트를 넣어주고 TEMP TABLE에 넣어준다

만약 CUSTOMERS테이블이 있다고 치면
컬럼: CustomerID, CustomerName, ContactName, Address, City, PostalCode, Country
INDEX: CustomerID, ContactName, Address라고 치면

IF OBJECT_ID ('tempdb.dbo.#TEMP01') IS NOT NULL DROP TABLE #TEMP01; SELECT CustomerID , ContactName , Address INTO #TEMP01 FROM CUSTOMERS WITH(NOLOCK) WHERE CustomerID = @CustomerID AND ContactName = @ContactName AND Address = @Address UPDATE A SET A.CustomerName = @CustomerName , A.City = @City , A.PostalCode = @PostalCode FROM #TEMP01 TP1 INNER LOOP JOIN CUSTOMERS A ON A.CustomerID = TP1.CustomerID AND A.ContactName = TP1.ContactName AND A.Address = TP1.Address

bottom of page