DB(3)
-
DB 인덱스에서 Hash보다 B-TREE 를 사용하는 이유
기본적으로 Hash Table은 탐색속도가 빠른 자료구조에용 그런데 왜 DB 인덱스에서는 Hash 가 아닌 B-TREE 구조를 사용할까용? B-Tree (Balanced Tree) 의 탐색 시간 복잡도는 O(logN) 에용 인덱스에 일반적으로 사용되는 자료구조는 B+TREE 구조에용 Hash Table 해시 테이블은 연관배열 구조를 이용해 key 에 value 를 저장하는 자료구조에용 연관배열구조 = key와 value 가 1:1 로 매칭되어있는 자료구조, key를 통해 value를 도출할수있음 해시 테이블의 Search(검색) 의 시간 복잡도는 기본적으로 O(1)이다. KEY에 매칭되는 VALUE 를 바로 찾기 때문이다. 그런데 이렇게 탐색시간이 빠른 Hash가 왜 인덱스에서 사용 되지 않을까용? 해시..
2023.01.31 -
[DB] Index, B-Tree , B+Tree
Index 데이터베이스에서 인덱스란 테이블에 대한 검색성능 속도를 높여주는 자료 구조입니다. 특정컬럼에 인덱스를 생성하면, 해당 컬럼의 데이터들을 정렬하여 별도의 메모리공간에 데이터의 물리적 주소와 함께 저장 됩니다. 인덱스의 단점으로는 항상 최신의 데이터를 정렬된 상태로 유지해야 빠르게 값을 탐색할수있기에 INSERT, DELETE, UPDATE 구문이 실행 된다면 계속해서 정렬을 해줘야 하고 이로인한 부하가 발생합니다. 때문에 인덱스에서는 이런 부하를 최소화 하기위해 데이터 삭제라는 개념에서 인덱스를 사용하지않음이라는 작업을 합니다. INSERT = 새로운 데이터에 대해 인덱스를 추가합니다. UPDATE = 기존 인덱스를 사용하지않음 처리 후, 업데이트 된 데이터에 인덱스를 추가함. DELETE = ..
2023.01.27 -
SQL - ONLY_FULL_GROUP_BY SQL 쿼리 실패
GROUP BY를 사용하는 경우, SELECT할 수 있는 컬럼은 GROUP BY에 나열된 컬럼과 SUM(), COUNT() 같은 집계 함수로 한정 됩니다. SQL 표준 문법은 GROUP BY 사용시 SELECT 의 칼럼 중 집계함수에 쓰이는 것을 제외한 모든 칼럼을 기입해야 한다. 내가 사용한 해결법 비 집계 칼럼에 ANY_VALUE() 함수 사용하여 문제를 해결 했다. 업데이트 예정 기본적인 해결 방법 - sql_mode 에서 ONLY_FULL_GROUP_BY 설정을 제외한다. ex) SET SESSION sql_mode = 'NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES'; - 설정파일(my.cnf)에서 ONLY_FULL_GROUP_BY 를 찾아 삭제한다.
2022.09.07