본문 바로가기

SQL/실전 SQL Server MVP 532

1. 데이터베이스 설계 및 아키텍처 - (1) Louis와 Paul의 관계형 데이터베이스 디자인 10가지 원칙_2 6. 커서보다는 집합을 이용하자SQL Server 개발에서 자주 범하는 실수 중 하나는 T-SQL 커서 형태로 코드를 작성하는 것이다.거의 대부분의 사람들이 커서가 얼마나 나쁜지에 대해서 여러 차례 들어보았을 것이다.데이터베이스 커서를 사용하는 것은 은행에 가서 수백만원을 입금할 때 한 번에 만원씩 수백번을 입금하는 것과 같다고 할 수 있다.집합 기반의 솔루션 개념으로는 한 번에 수 백만 원을 입금해버리면 된다.동일한 결과(입금한 돈이 헤아려지고 입금되는 것)가 이루어지지만, 매번 입금할 때마다 은행 창구 직원이 얼마가 입금되었다라는 말을 듣지 않아도 된다.성능의 차이는 명백하다.일반적으로 집합 기반의 솔루션이 반복 처리 형태의 솔루션보다 더 좋은 성능을 내며 그 차이도 상당하다.물론 커서를 사용하는 방.. 2025. 2. 6.
1. 데이터베이스 설계 및 아키텍처 - (1) Louis와 Paul의 관계형 데이터베이스 디자인 10가지 원칙_1 1. 역정규화는 성능을 지배한다데이터베이스 개발과 관련된 격언 중에는 "먼저 문제가 될 때까지 정규화를 하고, 그 다음에 제대로 동작할 때까지 역정규화를 해라."라는 말이 있다.말도 안되는 소리이다!SQL Server 6.5 또는 그 이전 버전에서는 OLTP 데이터베이스에서 역정규화를 하는 것이 더 나은 성능을 발휘할 수도 있었다.하지만, 요즘 시대에 통하는 말은 아니다.OLTP 또는 (보고서 서비스나 BI가 아닌) 운영 데이터베이스의 경우 정규화된 스키마에 적절하게 인덱스만 설정되어 있다면 역정규화된 스키마에 비해 항상 더 좋은 성능을 낼 수 있다.정규화된 디자인에서는 '이중으로 insert 하고 update를 해야 한다'라는 것과 데이터 조회 시 역정규화된 데이터를 피벗팅(pivoting)해야 한다는.. 2025. 2. 6.