DataBase/MSSQL 14

[MSSQL] INDEX 파편화 확인 인덱스 리빌드를 통한 성능 최적화

데이터베이스 성능을 유지하고 최적화하는 과정에서 인덱스 파편화는 무시할 수 없는 요소입니다. 특히, 삽입과 업데이트가 빈번하게 이루어지는 테이블에서는 시간이 지남에 따라 인덱스 페이지가 불필요하게 나뉘거나, 효율적으로 정렬되지 않음으로 인해 성능 저하가 발생할 수 있습니다. 1. 인덱스 파편화란?인덱스 파편화는 인덱스 페이지가 물리적으로 분산되어 데이터 검색 성능을 저하시키는 현상을 말합니다. 데이터가 추가되거나 삭제되면 인덱스 페이지가 비효율적으로 나뉘어져 디스크 I/O 작업이 증가하게 되고, 이로 인해 쿼리 성능이 떨어지게 됩니다. 특히 INSERT, UPDATE 작업이 많은 테이블에서 이러한 문제가 자주 발생합니다. 2. 인덱스 파편화 확인 방법SQL Server에서는 sys.dm_db_index_..

DataBase/MSSQL 2024.09.06

[MSSQL] 일별통계 데이터 작성시 spt_values 활용

일별통계 쿼리 작성시 데이터가 없어 데이터가 빠지는 현상이 있다. 이럴땐 spt_values 을 활용하여 LEFT OUTER JOIN 을 걸어 데이터 추출이 가능하다 DECLARE @S_DATE smalldatetime,@E_DATE smalldatetime SET @S_DATE = CONVERT(smalldatetime, '2019-02-01') -- 특정월 시작일자 SET @E_DATE = DATEADD(day, -1,DATEADD(MONTH, 1,DATENAME(YEAR,@S_DATE) + DATENAME(month,@S_DATE)+'01')) -- 특정월 종료일자 SELECT CONVERT(CHAR(10), DATEADD(d, NUMBER, @S_DATE),120) AS DT FROM MASTER..

DataBase/MSSQL 2022.03.15

[MSSQL] SP 문자열이나 이진데이터가 잘립니다.

간혹 INSERT SP 실행시 '문자열이나 이진 데이터는 잘립니다.' 와같이 컬럼의 길이가 맞지 않아 오류가 발생할 때가 있다. 간혹 컬림이 많은 테이블이라면 어떤 컬럼에서 문자열이 짤리는지 찾기 번거로울때가 있는데 그때는 SP 에 'SET ANSI_WARNINGS OFF' 설정을 주어 INSERT 시킨후 짤린 데이터가 있는지 찾아보는게 편하다.

DataBase/MSSQL 2021.11.25

[MSSQL] ROW 를 컬럼으로 바꾸는 방식 (PIVOT 과 CASE문)

아래와 같은 테이블을 사용자별 SNS 현황을 변환해서 하나의 ROW로 출력해야하는 경우에 사용한다. Sql Server PIVOT 함수를 사용하거나 CASE 문을 활용해서 사용이 가능하다. 두방식 모두 동일한 결과를 출력한다. PIVOT 활용 SELECT name, K AS Kakao , N AS Naver , F AS FaceBook FROM ( SELECTM.name, M.snsType FROM memberSns AS M ) AS MemberInfo PIVOT ( COUNT(snsType) FOR snsType IN ([K],[N],[F]) ) AS pivot_result 출력결과: CASE 문 활용 SELECTname, MAX(Kakao) as Kakao, MAX(Naver) as Naver, MA..

DataBase/MSSQL 2021.11.24

[MSSQL] 두테이블간 교집합(INTERSECT) 차집합(EXCEPT) 찾기

1. INTERSECT - SELECT * FROM TableA INTERSET SELECT * FROM TableB ( TableA 와 TableB 가 일치하는 결과를 리턴 ) - 교집합 개념 2. EXCEPT - SELECT * FROM TableA EXCEPT SELECT * FROM TableB ( TableA Row 내용 중 TableB와 Row 내용이 같지 않거나 TableA 에는 있는데 TableB에는 없는 데이터를 리턴 ) - 차집합 개념 3. 주의 사항 - TableA 와 TableB 의 컬럼의 갯수와 순서가 동일해야 함 - 각 상호 비교되는 컬럼들의 데이터 형식이 호환되어야 함 예제: //테이블간 컬럼이 모두 동일하지 않은경우 SubQuery 사용하여 조회가능 //차집합 SELECT *..

DataBase/MSSQL 2021.11.22

[MSSQL]MSSQL 날짜 변환표(GETDATE, CONVERT)

자주 쓰이는 변환표 번호 쿼리 결과 코드 21 CONVERT(CHAR(23), DATETIME, 21) 2000-01-02 13:14:15.678 YYYY-MM-DD HH:MM:SS.MS 23 CONVERT(CHAR(10), DATETIME, 23) 2000-01-02 YYYY-MM-DD 112 CONVERT(CHAR(8), DATETIME, 112) 20000102 YYYYMMDD - MSSQL 날짜 변환표 (기준날짜를 대상으로 CONVERT 실행하여 날짜 형변환) 번호 쿼리 결과 코드 0 CONVERT(CHAR(19), DATETIME, 0) 01 02 2000 1:14PM MM DD YYYY H:MM 1 CONVERT(CHAR(10), DATETIME, 1) 01/02/2000 MM/DD/YYYY ..

DataBase/MSSQL 2021.11.09

[MSSQL] SQL Server 에이전트로 API 호출

MSSQL SQL Server 에이전트를 활용하여 일정시간마다 API 를 호출하는 작업을 추가하는 방법입니다. 먼저 MSSQL Server 에이전트에 작업을 추가합니다. 우클릭을 눌러 새작업을 선택하면 아래와 같은 창이 나타납니다. 아래와같이 이름 및 간단한 설명을 남긴뒤 좌측상단의 단계를 설정합니다. 단계를 클릭하고 새로만들기(N)... 을클릭하여 단계를 추가합니다. 단계 이름과 명령어를 입력해주면 되는데 API 를 호출하기 위한 명령어는 아래와 같습니다. Declare @Object as Int; Declare @ResponseText as Varchar(8000) Exec [sys].[sp_OACreate] 'MSXML2.ServerXMLHTTP', @Object OUT; EXEC [sys].[sp..

DataBase/MSSQL 2021.03.13

[MSSQL]구분문자열로 Split처리 함수

MSSQL에서 특정문자열을 기준으로 데이터를 나눌때 사용하는 함수입니다. 1.문자열을 구분자로 분리하여 테이블로 반환하는 함수 CREATE FUNCTION [dbo].[FN_GET_Split] ( @StrValue VARCHAR(1000), -- 분리할 문자열 @SplitChar VARCHAR(1) -- 구분할 문자 ) RETURNS @SPLIT_TEMP TABLE ( VALUE VARCHAR(50) ) AS BEGIN DECLARE @oPos INT, @nPos INT DECLARE @TmpVar VARCHAR(1000) -- 분리된 문자열 임시 저장변수 SET @oPos = 1 -- 구분문자 검색을 시작할 위치 SET @nPos = 1 -- 구분문자 위치 WHILE (@nPos > 0) BEGIN S..

DataBase/MSSQL 2019.08.20

[MSSQL] 페이징 함수 OFFSET/FETCH

SQL Server 2012 에서 Offset/Fetch 를 사용하여 효과적인 페이징처리를 하는 방법입니다. SELECT seqnum,id, Name, celnumber,RegistDate FROM Member_info ORDER BY seqnum DESC OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY; 2페이지를 조회하려면 OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY; 로 OFFSET 을 수정하면되며 FETCH NEXT 는 한번에 조회할 데이터 갯수입니다. 온라인 설명서 : http://msdn.microsoft.com/ko-kr/library/ms188385(v=sql.110).aspx#Offset Offset Fetch에 대한 제한 사항 외부 쿼리와 상..

DataBase/MSSQL 2019.07.10

[MSSQL] 이전행과 다음행 데이터를 가져오는 LAG,LEAD 함수

SQL Server 2012 에서 행을 비교할때 사용할수있는 함수입니다. 1. 원본데이터 SELECT ProductID, ModifiedDate, StandardCost FROM Production.ProductCostHistory WHERE ProductID IN (711, 712, 713) ORDER BY ProductID, ModifiedDate 2. LAG/LEAD 함수 SELECT ProductID, StandardCost, ModifiedDate, LAG(StandardCost, 1, NULL) OVER (PARTITION BY ProductID ORDER BY ModifiedDate) AS PrevStandardCost, LEAD(StandardCost, 1, NULL) OVER (PARTI..

DataBase/MSSQL 2019.07.10