인덱스 설계 자 우리는 앞에서 여러 예시를 통해서 인덱스를 통해서 쿼리의 속도 등을 알아보았다 이제 테이블의 인덱스를 설계할 수 있을까? 사실 이 정도 지식만으로 인덱스를 설계하는 것은 무리가 있다 이러한 전문성을 갖추려면 세밀한 인덱스 원리와 이론을 바탕으로 많이 고민을 해보아야 한다 이번 시간에는 그러한 내용을 다루어 볼 것이다 인덱스 설계가 어...
SQL_튜닝_22
간단스키마 drop table Ex14_saleList create table Ex14_SaleList( item varchar(20), saleMan varchar(10), saleDate varchar(6) ) CREATE INDEX Ex14_SaleList_idx1 ON Ex14_SaleL...
SQL_튜닝_21
비교 연산자 종류와 컬럼 순서에따른 군집성 테이블과 달리 인덱스에는 같은 값을 갖는 레코들이 서로 군집해 있다 그렇기에 동등 비교(=) 연산자로 조회하면 조건절을 만족하는 레코드는 모두 모여 있다 만약 하나를 누락하거나, 동등 비교 연산을 하지 않는 경우 만족하는 레코드는 서로 흩어진 상태가 된다 다음 그림과 쿼리를 한번 보자 소스 https://g...
SQL_튜닝_20
인덱스 스캔 효율성 인덱스 스캔 효율이 좋은지 나쁜지는 어떻게 알 수 있을까? 앞에서는 실행계획을 통해 알아보았다 이때는 단순 cost로 알아보았는데 이번에는 트레이서와 tkprof를 통해서 한번 알아보겠습니다 데이터는 이전 데이터 EX11_EMPLOYEE , EX12_EMPLOYEE를 활용하겠습니다 쿼리 SELECT * FROM EX11_EMPL...
SQL_튜닝_19
이번 시간에는 ROWID를 통해 데이터를 가져오는 고비용에 대해서 어떻게 대처할 것인지에 대한 테이블 설계에 대해서 알아보겠습니다 일반적인 테이블 옵티마이저가 인덱스 테이블을 서칭해서 ROWID를 가져와서 버퍼캐시를 먼저 보는데 이때 버퍼캐시에 원하는 데이터가 있으면 고비용으로 처리되는 게 아닙니다 하지만 버퍼캐시에 없어서 디스크로 가서 데이터를 찾...
SQL_튜닝_18
인덱스 컬럼 추가 튜닝의 목적은 랜덤 I/O를 줄이는데 목적이 있다 그 목적을 달성하기 위해서는 인덱스 컬럼을 추가하는 것이 그 출발점이다 예를 들어서 다음과 같은 데이터와 정보가 있다고 하자 소스 및 간단 스키마 https://gitlab.com/kimdongy1000/sqltuningproject Ex9_Employee sql 참조하시면됩니...
SQL_튜닝_17
잠깐 복습을 해보자 앞의 일부분은 데이터베이스가 어떤 원리로 데이터를 가져오는지에 대해서 공부했다 특히 쿼리의 성능은 디스크 랜덤 I/O 가 얼마나 적게 발생하냐에 따라서 쿼리 성능의 척도가 된다고 배웠다 그리고 다양한 인덱스의 종류와 실행계획을 비교해 보면서 어떨 때 인덱스가 타고 어떨 때 인덱스가 타지 않는지에 대해서 공부했다 테이블 랜덤 액세스...
SQL_튜닝_16
인덱스 스캔의 종류 우리는 이제까지 여러 실행계획을 보았지만 아마 인덱스와 관련해서는 다음 2개만 보았을 것이다 Index Range Scan , TABLE ACCESS FULL에 대해서 말이다 이번 시간에는 이 둘을 포함해서 다른 것들에 대해서 정리하는 시간을 가질 것이다 예제소스 및 스키마 https://gitlab.com/kimdongy1000...
SQL_튜닝_15
자동 형변환 오라클에서는 자동 형변환이 있습니다 예를 들어서 컬럼이 타입은 varchar(Stirng) 타입이지만 사용자가 숫자를 넣어도 오라클은 알아서 형변활을 하게 됩니다 이를 실행계획 보면 이렇게 보입니다 EXPLAIN PLAN FOR SELECT * FROM Ex5_Student WHERE birthday > 20050605 S...
SQL_튜닝_14
소트연산 생략 지난 시간과 마찬가지로 계속해서 소트 연산의 생략을 보도록 하겠습니다 java 소스예제 https://gitlab.com/kimdongy1000/sqltuningproject 이곳에서 Ex4_custom 를 찾자 아래 .sql 파일도 스키마도 마련해두었습니다 예제는 계속해서 Ex4_Custom 를 사용하겠습니다 간단한 테이블 스키...