본문 바로가기

데이터베이스 SELECT6

대량 데이터 UPDATE / INSERT 와 UNION 가령 수백 수천 수만건의 데이터의 수정 혹은 입력을 요하는 경우가 존재한다.이러한 경우 일반적인 쿼리문으로 작업을 한다면 row단위별로 DBMS가 잠금과 로그를 기록하게 되어트랜잭션 오버헤드 발생 및 장시간 리소스를 독점하게 되고 수행 퍼포먼스 또한 현저하게 다운된다.당연히 해당 테이블에 대한 잠금(lock)이 발생함은 말할 것도 없다. 보통 아래와 같이 일반적인 SQL문으로 10만건을 수정한다고 가정하자. [AS-IS]UPDATE 테이블1 SET COL1 = '20240309', COL2 = '20240422', COL3 = 0, COL4 = 0WHERE PK1 = 'A' AND PK2 = 'EWRT' AND PK3 = 'HG' ;UPDATE 테이블1 SET COL1 = 'GFGD', COL.. 2025. 4. 24.
테이블 최종 엑세스 시각 MS SQL server MS SQL server 기준이며 여러가지로 응용이 가능해 보입니다.특히나 DBA role을 가지고 있다면...SQL server DMV는 참 맘에 든다. /* 테이블 최종 엑세스 시각 */ SELECT DB_NAME(A.database_id) AS DbName , SchemaName , TableName , MAX(LastAccess) as LastAccess FROM (SELECT sta.database_id as database_id , schema_name(schema_id) as SchemaName , name as TableName , (SELECT MAX(last_access) .. 2025. 4. 22.
대량의 dataset 비교 검증 방법 기존 쿼리에서 튜닝을 하는 경우나 테이블 변경으로 값을 검증해야 할때가 많다.한눈에 dataset 이 구분된다면 문제가 없지만DW나 DM ETL 결과같이 수십 수백만건이라면 문제가 달라진다.MS-SQL server 환경에서 대응하는 방법이다. 이러한 경우 다양한 자신만의 노하우들이 있겠으나 여기서는 3가지를 소개하고자 한다. 1. row count가 적은 경우 : 엑셀을 이용합니다. : 2개의 시트에 복붙하신 후 수식으로 처리합니다.(VBA로 처리해도 무관합니다.) : 한눈에 스크롤하며 처리하려면 shee1과 sheet2가 있다고 가정시 sheet3에 아래와 같은 수식 작성하고 해당 matrix에 붙혀넣기를 합니다. : =IF(Sheet1!A1 = Sheet2!A1, "", "*****") : 공란이 아.. 2025. 4. 22.
APPLY절(LATERAL)을 이용한 VIEW MERGING 유도 우선 INDEX에 대해서 간단하게 말해 보겠다.튜닝을 위해 사이트에 방문하면 크게 2가지 형태를 보인다.INSERT,UPDATE,DELETE 로 인한 lock과 래치경합으로 인한 대기 이슈와 SELECT 쿼리의 잘못된 작성이슈일반적으로 SELECT 쿼리 이슈만 생각하고 여타 비용을 포함한 모든 이슈를 무시한다면INDEX로 7할이상의 해결이 가능해진다.어떤 사이트에서는 15개이상의 컬럼을 정렬시키는 covered index도 종종 보기도 한다.물론 있으믄 좋긴하지..위에 언급한 것 처럼 오로지 select만 생각한다면.... 하고싶은 말은 index는 만능이 아니고무결성을 위한 제약조건으의 기능이 아니라면 최소한이다.근래 Juristocracy라는 법률주의가 세상을 뒤흔들고 있다.법률주의 : Rule by.. 2025. 4. 4.
Set (집합연산) vs Procedure (순차연산) 우리가 사용하는 RDBMS는 테이블들의 모음(상세히 말하자면 page 혹은 block 그 상위인 extent)이다.data mining을 위해서는 머리속의 연산방식을 변경해야 한다.예를들어 엑셀의 필터(고급/자동) 정도 수준에서 벗어나지 못하면 대용량 테이블들간 조인이 불가능하다.보통 Set단위 사고의 전환이 안될때 가장 많이 하는 행동이 쿼리를 분할하거나 외부 커서로 연산 이용하는 경우 또는 select절에 UDF를 만들어 처리하는걸 정말 많이 목도하게 된다.정말 치욕적이지 않은가?9할이상의 개발자들이 procedural(절차적) 한 조건분기와 순환문에서 벗어나지 못한다. 간단한 예로 당신의 수준을 점검해 보자.전형적인 절차적이고 레코드단위 연산으로 수억개의 데이터라면 답이 안나올수도 있다. DBO.T.. 2025. 2. 4.
조인의 순서 Driving table(Build Input) Drived table(Prove Input) SQL의 기본의 select 다.정형이건 비정형이건 목적 지향적 언어이므로 가장 중요한 것은 select 이며 모델러의 역량은 최종 결과물인 select를 기준으로 한다.모델러의 머리속에 그려지는 dataset의 다양한 조건에 맞게 설계하게 되는데 이때 select 쿼리 작성 능력에 따라 설계하기 마련이다.특정 테이블에 생각외로 컬럼이 많고 빈 컬럼이 많다면 모델러의 쿼리작성 능력을 의심해 볼만하다.반대로 모델링된 테이블들을 업무를 배제한채 함부로 판단해서도 안된다.그만큼 상황에 따른 대처방법이 다양한게 모델링이기 때문이다. select는 거창하게 말하지만 사실상 별게 없다.출력되는 부분은 select절에 대상 테이블은 from절에 필터링 조건은 where 절에 사실상 이게 전부이다.엑셀의 필터기능과 크.. 2025. 1. 20.