mssql
-
[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..
-
파싱 후 집계 샘플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..
-
생일 데이터 집계시 이슈Physical 2021. 5. 26. 13:11
부제 : 날짜와 시간 컬럼을 date 또는 datetime을 써야하는 이유. 연령을 계산하기 위해 생년월일이 있는 컬럼인 BirthDay nvarchar(20) 조사하였다. 역시나 날짜형이 아닌 문자가 들어가 있거나 월,일에 해당하는 부분에 30, 50 이런게 들어가 있거나 '098-05-01' 이런 정제되지 않은 데이터 4천여건 존재. 전체 190만건중 4천여건이라서 제외시키면 통계상으로는 큰 문제는 없지만 쿼리로 필터링은 해야 집계가 가능하다. 필터링하기 위해 SQLServer의 isdate()함수(리턴이 1이면 날짜형식 0이면 아님)를 사용하였으나 isdate()함수에서는 1이 리턴되었는데도 convert(date, BirthDay)함수 사용시 에러가 발생. isdate()결과는 1이라서 수만건중 ..