더북(TheBook)

역정규화된 데이터베이스는 읽기 작업이 많을 때도 잘 작동한다. 데이터가 소수의 테이블에 있으므로 필요한 조인 횟수가 적거나 아예 없어서 SELECT 속도가 빠르기 때문이다. 필요한 데이터를 담은 단일 테이블을 사용하면 인덱스를 훨씬 효율적으로 사용할 수 있다. 적절한 컬럼에 인덱스를 만들었다면, 테이블 전체를 직접 읽지 않고 인덱스만으로 원하는 데이터를 빠르게 걸러 내고 정렬할 수 있다. 또 데이터 쓰기 작업이 빈번하지 않으므로 너무 많은 인덱스가 쓰기 성능에 심각한 영향을 줄까 걱정하지 않아도 된다. 필요하다면 테이블에 있는 모든 컬럼에 인덱스를 만들어서 조회와 정렬 성능을 크게 높일 수도 있다.

효과적으로 역정규화하려면 데이터를 잘 파악하고, 데이터를 어떤 식으로 조회하는지 알아야 한다.

가장 쉬운 역정규화 방법은 테이블에 있는 IDENTITY 필드를 복제해 조인을 없애는 것이다. 예를 들어 정규화된 데이터베이스에서 고객을 회계 관리자와 연결하려고 Customers 테이블에 EmployeeID 컬럼을 외래키로 만들었다고 하자. 회계 관리자 데이터를 포함해 청구서 정보를 조회한다면 테이블을 세 개(Invoices, Customers, Employees) 조인해야 한다. 하지만 Invoices 테이블에 EmployeeID 컬럼을 두면 InvoicesEmployees 테이블만 조인한다. 물론 Customers 테이블에 있는 다른 데이터도 조회해야 한다면 다시 세 테이블을 조인한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.