본문 바로가기
반응형

index4

[Mysql] Specified key was too long 특정 테이블에 index를 걸고자 할때 아래 에러가 발생하였다. Error Code: 1071. Specified key was too long; max key length is 3072 bytes 원인은 해석 그대로 이다. 인덱스에 사용하는 글자 최대 크기가 정해져있다는것이다. 테이블에 사용하는 인코딩은 UTF8MB4 였고 여기서 한 글자당 4byte를 잡아먹는다. 3072 바이트를 넘을수 없다면 대략 750 글자까지만 허용이 가능하다. 인코딩에 따라 글자 byte수가 다르니 확인해야하고, 인덱스는 별도의 공간을 차지하기에 이렇게 큰 값은 인덱스로 배제하는것이 좋은 선택일듯 싶다. 2024. 1. 23.
[Oracle] 인덱스 힌트/ 옵티마이저 힌트 사용방법 (주석, 튜닝) 기본적으로 쿼리를 실행하면 DBMS 내의 옵티마이저가 여러개의 실행 계획을 만들고 그 안에서 제일 비용이 적게 소요되는 실행계획을 선택하여 실행이 된다. 하지만 옵티마이저를 믿지 못하거나 특정 방법으로 실행계획을 하고 싶을 시에는 옵티마이저 힌트를 사용하면 된다. 기본적으로 사용법은 아래와 같다. 위에 주석 부분에 사용을 하고 자주 사용되는 값들은 아래와 같다. 1. OPTIMIZER_MODE 지정가능 값 /*+ ALL_ROWS */ 목적 : Best Throughput 용 도 : 전체 RESOURCE 소비를 최소화시키기 위한 힌트. Cost-Based 접근방식으로 ALL_ROWS는 Full Table Scan을 선호하며 CBO(Cost Based Optimization)는 default로 ALL_ROW.. 2023. 11. 25.
INDEX SCAN종류 Database 에서 query사용시 인덱스에 대해서 알아볼 것이다. INDEX RANGE SCAN B*Tree인덱스의 가장 일반적이고 정상적인 형태이고 필요한 범위만 스캔 INDEX FULL SCAN 수직탐색 없이 리프블록 처음부터 끝까지 수평적으로 탐색하는 방식 최적의 인덱스가 없을 경우 사용한다. INDEX UNIQUE SCAN 수직적 탐색만으로 데이터를 찾는 방식 등치(=)조건으로 탐색하는 경우에 작동한다. INDEX SKIP SCAN 인덱스 선두컬럼을 조건절에 사용하지 않으면 옵티마이저는 기본적으로 TABLE FULL SCAN을 선택한다. 하지만 TABLE FULL SCAN보다 I/O를줄이거나 정렬된 결과를 쉽게 얻을수 있다면 INDEX FULL SCAN사용 한다. INDEX FAST FULL .. 2023. 11. 24.
[Mysql] 문자열 추출 Mysql 에서도 프로그래밍 처럼 문자열을 자를수가 있다. substring substring(문자열, 시작위치, 길이) select substring("ABCDEF",3); //CDEF select substring("ABCDEF",3,2); //CD select substring("ABCDEF" from 3); //CDEF select substring("ABCDEF" from 2 for 2); //BC left, right left(문자열, 길이) / right(문자열, 길이) select left("ABCDEF",2); //AB select right("ABCDEF",2); //EF substring_index substring_index(문자열, 구분자, 구분자 인덱스) select substr.. 2022. 9. 27.
반응형