"안내사항이 실제 도로상황과 다를 수 있으니 이 시스템은 참고용으로 사용하십시오."


자동차 네비게이션을 켤 때마다 나타나는 경고 메시지다


네비게이션 스스로 경고하듯, 자동차 운전자는 본인의 판단과 선택에 따라 운전해야한다


네비게이션 정보는 참고용일 뿐이다


데이터베이스 세계에서도 불완전한 옵티마이저에만 의존할 것이 아니라 개발자 스스로 옵티마이저가 되어야 한다


능력이 없어 맡기는 것이 아니라 바빠서 맡긴다고 생각하기 바란다


바쁘니 일단 옵티마이저에 맡기지만, 그 결과물이 올바른지 실행계획을 통해 늘 점검하고, 더 개선할 여지는 없는지 찾으려고 노력해야 한다


RDBMS를 사용하기 전, 그러니까 데이터 추출 프로그램을 일일이 로직으로 개발하던 시절로 돌아가 보자


그때는 자신이 개발한 프로그램 성능이 느리면 어떻게 해서든 빠르게 개선하려고 많은 노력을 했다 그래야만 했고, 그것을 본인의 역할로 인식했다


RDBMS 환경에서 개발하는 요즘 개발자들은 어떤가 결과가 올바르게 나오도록 SQL과 프로그램 로직을 구현하는 일은 본인 역할이라고 생각하지만,

SQL자체 성능은 DBA 또는 튜닝팀 역할이라고 생각하는 듯 하다


실행계획을 확인하는 방법조차 모르는 개발자도 많다


마치, 지도상에서 현재 자신의 위치가 어디인지도 모른 채 네비게이션에만 의존해 달리는 운전자의 모습과 비슷하다


기본적으로 옵티마이저에게 많은 일을 맡기는 RDBMS 환경에서 SQL 성능을 높이기 위해 개발자가 할 일은 다음과 같다


- 필요한 최소 블록만 읽도록 쿼리를 작성한다

- 최적의 옵티마이징 팩터를 제공한다

- 필요하다면, 옵티마이저 힌트를 사용해 최적의 엑세스 경로로 유도한다