검색을 빠르게 만들기 위해 "따로 복사 후에 정렬해둔 컬럼"을 index라고 한다
(프라이머리키랑 같음)
Btree(B+tree) 아래 설명 참고
Rtree는 2차원 좌표값을 저장한 컬럼일 때 사용 (예를 들어 위도/경도)
Full text는 긴 문장에서 원하는 단어 빠르게 찾고 싶을 때 사용
하나의 컬럼에만 적용
CREATE INDEX 인덱스이름작명 ON 테이블명 (컬럼명);
다중컬럼
CREATE INDEX 인덱스이름작명 ON 테이블명 (컬럼명1, 컬럼명2);
컬럼명 LIKE %단어% 로 검색기능을 만들 순 있으나
인덱스 생성
CREATE FULLTEXT INDEX 인덱스이름작명 ON 테이블명(컬럼명);
검색
SELECT * FROM library WHERE MATCH(컬럼) AGAINST('검색어');
위의 인덱스의 경우 띄워쓰기 단위로 단어를 잘라 인덱스를 매겨놓고 검색하는 방식인데 띄워쓰기가 다 틀릴 수도 있으니
CREATE FULLTEXT INDEX 인덱스이름작명 ON 테이블명(컬럼명) WITH PARSER ngram;
를 사용하여 인덱스 제작하여 사용하는 것도 방법
but 위 같은 경우 연관된 검색어를 다 찾아준다.(정확도순 자동 정렬)
예: '기린을' 검색시 기린, 린을 등이 들어간 단어는 모두 찾아줌
이진 탐색 트리(Binary Search Tree, BST)는 이진탐색과 연결리스트(Linked List)를 결합한 자료구조이다.
이진탐색
장점 : 탐색에 소요되는 시간복잡도는 O(log n)으로 빠름
연결리스트
장점 : 자료 입력, 삭제에 필요한 시간복잡도는 O(1)로 빠름
단점 : 탐색하는데 O(n)의 시간복잡도를 가짐.
이진 탐색 트리는 이 둘의 장점을 합쳐보고자 만들어진 자료구조이다.
B+tree라고 해서 데이터를 트리 중간중간에 보관하는게 아니라 가장 밑에만 보관하는거
범위검색을 할 때 훨씬 빠르게 찾을 수 있습니다.