전체 글
-
포인트 만료 및 FIFO 테이블 설계Logical 2021. 8. 18. 13:58
* 만료일시를 연장시켜주고 싶을 경우는 연장보다는 즉시 관리자차감시킨 후 차감금액만큼 새로운 만료일시로 관리자지급으로 처리할것 * 100포인트 사용 후 50포인트만 취소는 불가 * 사용 후 취소시점에 만료일이 지난 경우는 취소불가 꼭 줘야 하는 경우에는 새로 관리자 지급 구매보상충전으로 받은 포인트를 사용한 이후 구매보상충전건을 취소할 경우는 구매보상충전건이 일부라도 사용이 되지 않은 상태만 일반적인 취소처리를 수행하고 일부나 전액 사용된 * 포인트변경 트랜잭션 시작 후 user.point를 select for update를 하거나 update를 해야함. 사용가능한 금액만큼 가지고 있는지 체크를 할 경우 아래와 같이 update를 하여 update user set point = point + @변경액 w..
-
-
[MSSQL] DB내의 모든 테이블 및 인덱스 현황Physical 2021. 7. 30. 11:08
근 5년만에 다시 잡은 MSSQL.. 기존 현황 조회에 사용하던건 한방이 아니기도 하고 예전 메타뷰들을 많이 사용해서 새롭게 한방 쿼리로 작성해보았다. db_name부터 update_ymd까지가 테이블에 대한 정보이며 idx_type부터 idx_col_name까지가 해당 테이블의 개별 인덱스들에 대한 정보 테이블 정보만 조회하고자 할 경우 4번째 줄부터 시작하는 서브쿼리만 실행. total_size_mb : 데이터 및 인덱스 포함 모든 크기 2nd_idx_cnt : 테이블데이터가 포함되어 있는 clustered index를 제외한 2차 인덱스들의 개수 2nd_idx_cnt : 테이블데이터가 포함되어 있는 clustered index를 제외한 2차 인덱스들의 크기 update_ymd : 테이블 데이터 마지..
-
[MSSQL] view nolock 힌트 테스트Physical 2021. 7. 29. 17:31
Oracle, MySQL, PostgreSQL등과 다르게 특이한 형태의 MVCC를 사용하는 MSSQL MSSQL을 접한지 15년이 넘었지만 아무래도 MS의 가장 큰 패착이었을것으로 보이는 아키텍처 그로 인해 이런 테스트도 해본다. 당연히 이러하겠지라는 결과이지만 추정보단 확실한 확인이 엔지니어의 기본 소양이므로.. Version : SQLServer 2014 * 테스트 준비 -- 테스트 테이블 및 뷰 생성 drop table t1 go create table t1 (c1 int) go insert into t1 (c1) values (100), (200) go drop view v_t1 go create view v_t1 as select * from t1 go drop view v_t1_nolock g..
-
튜닝 예시 #3Logical 2021. 7. 28. 13:28
* 부제 : 무분별한 뷰 사용을 지양해야하는 이유 & 힌트가 필요한 이유 속도개선 : 2483ms → 64ms -- 원본쿼리 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SELECT G.상품번호, G.가격, G.kind, G.상품애칭확인, G.상품애칭, 상품명 , [dbo].[fn_Get상품이미지경로](g.상품번호, 3) as 상품이미지경로 , dbo.fn_Get할인액(g.상품번호) as 할인액 , (g.가격-dbo.fn_Get할인액(g.상품번호)) as 할인된가격 , C.brand_en, C.brand_seq, G.bcomcat, G.btopcat, G.bmidcat , (select cnt_month from 상품별판매통계 where 상품번호=c.상품번호)..
-
튜닝 예시 #2Logical 2021. 7. 26. 13:18
속도개선 : 3432ms → 220ms -- 원본쿼리 SELECT * , CASE WHEN Gubun = 2 THEN [dbo].[fn_Get상품이미지경로](상품번호, 1) else '' END AS 상품이미지경로 FROM 문의사향뷰 WHERE site='D' and Step=0 ORDER BY regdate DESC OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY -- 10 -- CPU 시간 = 3421ms, 경과 시간 = 3432ms -- AllQnA라는 QandA 일반 Q&A테이블과 GoodBBS라는 상품문의 테이블을 -- union all 해놓은 뷰를 통해 쿼리 수행 -- 해당 뷰는 여러용도로 활용하기 위해 가져올수 있는 대부분의 컬럼을 명시한 형태 -- 튜닝쿼리 select ..
-
튜닝 예시 #1Logical 2021. 7. 23. 15:51
속도개선 : 1303ms → 23ms -- 원본쿼리 select count(*) from ( select o.userid from 주문 o , ( select userid from 배송 d where d.배송일자코드='20210702_1555' and d.userid not in (N'koukann',N'd_press',N'rakuten1234',N'amazon1234',N'sunbuy1') group by userid ) a where o.주문상태='4' and o.userid = a.userid Collate Japanese_CI_AI and convert(varchar(10),o.결제일시,121)0 ) b; -- 2035 -- CPU 시간 = 1297ms, 경과 시간 = 1303ms -- 약 132..
-
파싱 후 집계 샘플Physical 2021. 7. 16. 15:48
-- 파싱 대상 테이블 생성(테이블들과 필터링조건은 생략) select d.gserial , convert(nvarchar(max), ginfo) as ginfo into ijchoi.dbo.cr_goods from xxx a with(nolock); -- 2939 -- 아래 로우로 분리하는 펑션 사용시 형태나 '&'의 html 태그가 있으면 에러 나므로 -- 데이터를 변경하거나 펑션을 변경해야함. -- 정제 select gserial , replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace( left(ginfo, charindex(N'', gi..