Database
-
WGS84 좌표계를 이용하여 거리를 구하는 functionDatabase 2023. 6. 20. 21:55
MSSQL에서 두 좌표간의 거리를 구하는 function을 만들어 보았다. -- ============================================= --WGS84좌표계에서 두 좌표간의 거리 구하기 -- ============================================= alter FUNCTION [dbo].[WGS84_DISTANCE] ( @LAT1 decimal(38, 30), -- 위도 @LNG1 decimal(38, 30), -- 경도 @LAT2 decimal(38, 30), -- 타겟위도 @LNG2 decimal(38, 30) -- 타겟경도 ) RETURNS decimal(38, 30) AS BEGIN RETURN ( 6371.0 * acos(cos( radians( ..
-
MSSQL tempDBDatabase 2020. 11. 26. 13:24
행수가 좀 많은 테이블에 어쩔수 없이 left join을 걸어서 산출물을 만들어야 하는 일이 생겼다. AI관련 데이터 전처리를 하는데 5초당 쌓이는 테이블과 결과 테이블 사이에 매칭을 할 수 있는 값이 없어서 datetime별로 조건을 걸어서 범위로 검색을 해야했다. 좋지 않은 쿼리 문장이기도 하고 left join 을 거니까 하루치 데이터를 산출하는데 실행 계획에서 조단위가 아닌 경단위를 넘어서는 행스캔을 하게 되었다. 해당 DB 서버는 성능이 일반 데스크탑 수준이었고 1시간정도 돌리니 tempDB 용량 부족으로 쿼리가 멈춰버렸다. 설정을 살펴보니 tempDB의 위치가 C드라이브 인데 C에 공간이 없었던것이 이유다. 그래서 tempDB에 대하여 검색을 하기 시작하고 일단 임시방편으로 tempDB의 파일..
-
MSSQL 테이블 확인 TipDatabase 2020. 11. 12. 16:24
SP_DEPENDS'테이블명'--테이블종속성확인(type에서 어디에 사용되어 종속되는지 알수 있다) SP_HELPCONSTRAINT '테이블명'--테이블제약조건확인 SP_HELPINDEX'테이블명'--테이블인덱스확인 --테이블을 사용하는 프로시저 검색 SELECT * FROM sys.procedures WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%테이블명%' --테이블을 사용하는 트리거 검색 SELECT * FROM sys.triggers WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%테이블명%'
-
MSSQL MERGE 예제Database 2020. 11. 10. 17:24
MERGE 단일 문에서 여러 DML(INSERT, UPDATE, DELETE) 작업을 수행할 수 있다. 즉, 여러 개의 개별 DML문을 단일 문으로 대체할 수 있다. 작업이 하나의 문 내에서 수행되면서, 데이터가 처리되는 횟수가 최소화되고 쿼리 성능이 향상된다. MERGE 변경될테이블명 AS A USING (SELECT 컬럼명 FROM 기준테이블명) AS B ON (A.컬럼명 = B.컬럼명 AND A.컬럼명 = B.컬럼명) WHEN MATCHED AND 조건 THEN INSERT (A.컬럼명) VALUES(B.컬럼명) WHEN NOT MATCHED AND 조건 THEN UPDATE SET A.컬렴명 = B.컬럼명 WHEN NOT MATCHED AND 조건 THEN DELETE; 재귀쿼리에 MERGE 사용..
-
DB백업로그 안남기기Database 2020. 11. 4. 17:28
Error로그는 남는다. USE DBName; GO DBCC TRACEON(3226,-1) DBCC TRACESTATUS /* TraceFlag Status Global Session --------- ------ ------ ------- 3226 1 1 0 */ BACKUP DATABASE DBName TO DISK ='D:\BACKUP2.BAK' /* 파일3에서데이터베이스'BACKUPLOGTEST', 파일'BACKUPLOGTEST'에대해176개의페이지를처리했습니다. 파일3에서데이터베이스'BACKUPLOGTEST', 파일'BACKUPLOGTEST_log'에대해5개의페이지를처리했습니다. BACKUP DATABASE이(가) 181개의페이지를0.419초동안처리했습니다(3.364MB/초). */ exec s..
-
SORT 영역을 적게 사용하도록 SQL 작성Database 2020. 11. 4. 10:53
소트 연산이 불가피하다면 메모리 내에서 처리되게 하려고 노력해야 한다. 소트 영역 크기를 늘리는 방법도 있지만 그전에 소트 영역을 적게 사용할 방법부터 찾는 것이 순서다. 가. 소트 완료 후 데이터 가공 특정 기간에 발생한 주문상품 목록을 파일로 내리고자 한다. 아래 두 SQL 중 어느 쪽이 소트 영역을 더 적게 사용할까? [ 1번 ] select lpad(상품번호, 30) || lpad(상품명, 30) || lpad(고객ID, 10) || lpad(고객명, 20) || to_char(주문일시, 'yyyymmdd hh24:mi:ss') from 주문상품 where 주문일시 between :start and :end order by 상품번호 [ 2번 ] select lpad(상품번호, 30) || lpad..
-
파티션 확인하고 파티션테이블별로 조회하기Database 2020. 11. 4. 10:36
SELECT pf.*, prf.* FROM sys.partition_functions pf JOIN sys.partition_range_values prf ON pf.function_id = prf.function_id --WHERE pf.name = '파티션네임'; --group by name select * from tBM where $partition.위쿼리에서 확인한 파티션 name(value index키값) = boundary값 테이블 파티셔닝은 다양한 디자인과 성능 문제에 도움을 줄 수 있는 훌륭한 기능이지만, 또한 문제 집합을 만들 수도 있다. clustered index에 파티션 열을 추가하면 저장공간 및 인덱스 유지 보수 비용이 증가한다. 다른 물리적 데이터 레이아웃 변경이 될 경우 실행..
-
관리자를 위한 튜닝 가이드Database 2020. 11. 4. 10:33
운영체제 환경 설정편 1 필요한 윈도우 구성 요소만 설치했는가? 2 최신 서비스팩과 핫픽스를 설치했는가? 3 파티션은 NTFS를 사용하는가? 4 불필요한 서비스를 사용중지 설정을 해두었는가? Application Management 할당,게시,제거 같은 소프트웨어 설치 서비스. SQL 서버와는 관련 없는 기능. DHCP Client SQL 서버는 고정 IP를 부여받아야 하므로 동적 IP 할당 클라이언트를 켜놓을 필요가 없다. Fax 팩스를 SQL 서버에 부착하는 것은 서버관리자로서 실격이다. Messanger 화면에 뿌려지는 메신저보다는 이벤트(파일)로 관리하거나 메일링을 사용하는 것 이 기록에 남아서 관리에 용이. Print Spooler 프린터를 SQL 서버에 부착하는 것은 말도 안됨. Remote ..
-
오라클 vs MS SQL 함수 비교Database 2020. 10. 30. 15:43
수식/수치 연산 함수 다음은 Oracle에서 지원하는 수식/수치 연산 함수와 그에 상응하는 Microsoft SQL Server의 함수를 정리한 표입니다. 함수 설명 Oracle Microsoft SQL Server 절대 값 ABS ABS 아크 코사인 ACOS ACOS 아크 사인 ASIN ASIN n의 아크 탄젠트 ATAN ATAN n과 m의 아크 탄젠트 ATAN2 ATN2 최소 정수 >= 값 CEIL CEILING 코사인 COS COS 쌍곡선 코사인 COSH COT 지수 값 EXP EXP 최대 정수