IT Diary/# SQL 5

[ SQL ] 004. INDEX가 동작을 제대로 안하는 경우 #2

3. 결합인덱스 사용 시, 인덱스 구성의 첫인덱스가 where절의 첫 조건에 적용하지 않았을 경우 두 개 이상의 컬럼을 합쳐서 인덱스를 만들 때 결합인덱스라고 한다. 결합인덱스 컬럼 선택의 기준점은 where 절에서 and 조건으로 자주 사용되며, 각각 사용할때보다 두 개 이상의 컬럼이 결합될 때 분포도가 좋아지는 컬럼 ※ 분포도(Cardinality) : 해당 컬럼의 중복도가 적을 경우 분포도가 높고, 중복도가 높을경우 분포도가 낮다 흔히, 우리가 Table의 ID 는 중복되는 값이 없으므로 분포도가 높다고 할 수 있고, Name 같은 컬럼은 ID에 비해 중복되는 값이 많으므로 분포도가 높다고 할 수 있다. 테이블 조인을 위한 연결고리로 사용되는게 빈번한 컬럼 자주 정렬되는 컬럼인지 고려 쿼리 작성시 ..

IT Diary/# SQL 2023.01.11

[ SQL ] 003. INDEX가 동작을 제대로 안하는 경우 #1

실무를 하다보면 요즘에는 NoSQL, QueryDSL 등의 좋은 기술들로 인해 직접 복잡한 쿼리를 짤 경우는 많지는 않지만 쿼리를 만들고 나서 실행계획을 보면 내가 의도했던 인덱스를 타지 않은 경우들이 종종있다. 실제 쿼리를 보면 잘 짠거같은데 인덱스를 제대로 타지않는 경우에 대해서 공부를 하다보니 내가 미처 몰랐던 부분들이 많았던 것 같다. 인덱스가 제대로 동작하지 않는 케이스 1. 조건문에서 인덱스의 컬럼을 변형시킨 경우 이 경우는 정말 실수하기 좋은 케이스이다. 만약 내가 생년월일(birth_date) 라는 char형 컬럼을 인덱스로 만들었다고 가정했을 때, 아래와 같이 쿼리문을 짜면 조건문의 값이 int형이기 때문에 Stirng으로 만든 인덱스가 타지 않는다. select * from test_t..

IT Diary/# SQL 2023.01.04

[ SQL ] 003. 실행계획 보는법

1. 실행계획이란? SQL이 실행되어 데이터를 처리하고 할 때, 옵티마이저에서 수립되는 SQL 실행방법론 가장 안에서부터, 가장 위에서 부터 차례차례 읽으면 된다. 항목 의미 Id Operation의 Id. Predicate Information에 정보가 있다면 Id와 연결된다. Operation 수행되는 일 Name Operation이 수행되는 테이블 혹은 인덱스 --> 오브젝트명 Rows 각 Operation이 끝났을 때 반환되는 예상치 건수 Bytes Access 하는 byte 수 예상치 Cost(%CPU) Operation의 비용 --> 누적치 Time 예상 수행 시간 access Predicate block을 읽기 전에 어떤 방법으로 block을 읽을 것인지 결정. --> index ? full..

IT Diary/# SQL 2022.04.18

[ SQL ] 001. INDEX 의 정의

쿼리의 수행시간을 단축시킬 수 있는 가장 좋은 방법은 INDEX 생성 혹은 INDEX 힌트를 쓰는게 아닐까 생각합니다. 그러면, INDEX는 말로만 매일 인덱스, 인덱스하는데 정작 INDEX 가 무엇이고 어떤식으로 작동하는지 알기는 쉽지 않아서 공부도 할겸 같이 공유를 해볼까합니다. 1. INDEX 의 정의 인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다. 쉽게 말하면, 책의 색인과 같다고 보면된다. ( * 색인은 책에 포함 된 키워드와 주요 용어를 찾는 포인터 역할을하는 페이지를 의미합니다. ) 오라클에서 제공하는 인덱스 종류는 총 4 가지. ( 인덱스의 종류가 이렇게 많은줄 몰랐다..) B*TREE 인덱스 비트맵 인덱스(BITMAP I..

IT Diary/# SQL 2021.03.17

[ SQL ] 002. INDEX SCAN

실무를 하다보면 가장 많이 접하게 되는 용어 중, 하나인 INDEX INDEX의 위키디피아의 정의는 아래와 같다. "데이터베이스 분야에 있어서 테이블에 대한 동작의 속도를 높여주는 자료 구조" 실제 우리가 책을 읽을 때도 제일 처음 접하게 되는게 INDEX(목차) 입니다. SQL에서도 동일하게 이 INDEX는 우리가 원하는 정보를 빠르게 찾도록 도와주는 역할을 합니다. INDEX를 생성하고,삭제 등등의 기본적인 내용은 자세하게 정리된 글들이 많아서 저는 실무에서 많이 사용되는 힌트 중에서 INDEX 관련된 내용을 정리해볼까 합니다. 전문 DBA가 아닌 단순 개발자의 눈으로 바라봐서 내용이 다소 부실할 수 있습니다. 1. Index Range Scan : 인덱스의 일부분만 범위 스캔해서 DATA를 엑세스 ..

IT Diary/# SQL 2021.03.16