더북(TheBook)

DB2, SQL Server, 오라클을 사용한다면 계산 컬럼에 인덱스를 만들 수 있고, 보통은 인덱스 덕분에 계산된 결과에 의존하는 쿼리가 빨리 수행될 것이다. 코드 1-6의 SQL Server 예제(다른 데이터베이스 시스템에서도 마찬가지다)는 다른 테이블에 있는 컬럼에 의존하는 비결정적 함수를 사용했기 때문에 인덱스를 만들 수 없었음을 기억하자(‘BETTER WAY 17. 인덱스에서 계산 결과를 사용할 시기를 파악하자’를 참고한다).

SQL Server에서는 표현식에 PERSISTED 키워드를 추가로 명시해야 하는 반면, DB2에서는 일단 표현식에 인덱스를 만들어 놓으면 자동으로 유지된다.

코드 1-7에서는 호출된 함수 값이 변할 때마다, 즉 Order_Details 테이블의 로우를 갱신·삭제·삽입할 때마다 부하가 걸린다. 누군가가 주문 정보를 많이 입력하면 이 함수가 계산을 수행하고 인덱스 값을 저장해야 하기 때문에 응답 시간은 현저히 느려질 것이다. 코드 1-6과 코드 1-8에서는 Orders 테이블에 있는 컬럼을 가져올 때마다 부하가 걸리므로, SELECT를 수행할 때 테이블에 계산 컬럼을 포함하고 가져올 로우의 개수가 많다면 응답 시간은 참기 힘들 정도로 느릴 것이다.

 

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