인덱스는 단순히 하나의 컬럼이 아니라, 여러 개의 컬럼에 대해서, 합쳐서도 만들 수 있습니다. 무슨 말인지 볼게요.
코팡 데이터베이스에서 상품을 조회를 할 때 하나의 기준이 아니라, 여러 개의 기준을 합쳐서 많이 한다고 할게요. 예를 들어 브랜드와 종류, 나이코 회사의 반팔티 이렇게요. 이때 각각 브랜드와 종류에 대해서 따로 인덱스가 있다고 하면 어떻게 할까요?
둘 중 하나를 해야합니다.
- 먼저 특정 브랜드, 나이코에 해당하는 로우들을 인덱스와 이진 탐색으로 찾고, 그 다음에 이 로우들에서 반팔티 제품들을 선형 탐색으로 찾거나,
- 반팔티 제품인 로우들을 인덱스와 이진 탐색으로 찾고, 그 다음에 이 로우들에서 나이코인 제품을 선형 탐색으로 찾아야하는 거죠.
어찌됐던 간에, 결국에는 선형 탐색으로 데이터를 찾아야되는 경우가 생기는데요.
두 개, 또는 더 많은 여러 개의 조건을 사용해서 조회를 많이 할 때는 컬럼 하나가 아니라 여러 개에 대해서 인덱스를 만들 수 있습니다.
예를 들어 브랜드와 종류, 이 두 컬럼에 대한 인덱스는 이렇게 만들 수 있죠. 일단 데이터가 브랜드로 정렬돼있고, 같은 브랜드 안에서는 또 종류로 정렬돼있습니다.
그럼 여기서는 먼저 원하는 브랜드를 이진 탐색으로 찾고, 원하는 종류도 그 안에서 이진 탐색으로 찾을 수 있기 때문에, 데이터 조회를 훨씬 더 빨리 할 수 있습니다.
심지어 브랜드와 종류, 그리고 색에 대한 인덱스를 만들고 싶으면, 이렇게도 인덱스를 만들 수 있습니다.
브랜드와, 종류와, 색갈. 원하는 브랜드를 이진 탐색으로, 종류도 이진 탐색으로, 색도 이진 탐색으로 찾아낼 수 있는 거 보이시죠? 그리고 이 인덱스는 데이터 조회에 함께 많이 사용하는 컬럼들의 그 어떤 조합에도 사용할 수 있습니다.
다만 주의하셔야되는 게 두 가지 있는데요.
먼저 첫 번째는 전에도 말했지만, 개별 컬럼들에 인덱스를 추가하는 것과, 여러 컬럼들에 대한 인덱스를 추가하는 건 두 개의 다른 인덱스입니다. 그러니까 아무리 브랜드, 종류, 그리고 색 컬럼들에 대한 인덱스 세 개를 만들어놔도, 브랜드, 종류, 색 모두에 대한 인덱스와는 다르다는 거죠.
두 번째는 여러 컬럼들에 대한 인덱스를 만들 때, 순서가 중요하다는 겁니다. 예를 들어 브랜드, 종류, 색갈에 대한 인덱스가 있다고 할게요.
이 인덱스를 살펴보면 이미 가장 앞순서인 브랜드에 대한 인덱스가 내제돼있다는 걸 알 수 있습니다. 예를 들어 이 인덱스에서 브랜드가 나이코인 제품들만 찾고 싶다면, 그대로 사용해서 두 번째 기준은 보지 않고, 바로 주소 1050인 로우부터 하나씩 아래로 내려가면서 나이코 제품들만 찾을 수 있습니다. 그렇기 때문에 이 인덱스와 브랜드 하나에 대한 인덱스를 두 개를 다 저장할 필요가 없습니다.
또 색을 제외하고, 브랜드와 종류에만 대한 조회를 한다고 할게요. 그럼 이때도 따로 브랜드와 종류 쌍에 대한 인덱스를 사용할 필요가 없습니다. 이미 이 인덱스에서 두 컬럼에 대한 인덱스가 저장돼있기 때문에 이것만 있어도 인덱스를 효과적으로 사용할 수 있죠.
그러나 브랜드와 색갈을 조건으로 조회를 할 때는, 중간에 종류 인덱스를 건너뛰기 때문에 인덱스를 사용할 수가 없습니다. 그렇기 때문에 여러 컬럼에 대한 인덱스를 사용할 때는 항상 가장 왼쪽에 조건으로 가장 많이 사용하는 컬럼을 사용하고, 오른쪽으로 갈수록 조건으로 덜 사용하는 컬럼을 사용해야 합니다. 이렇게 하면 인덱스를 여러 개를 저장하지 않고도, 조회를 빨리할 수 있는 효과를 만들 수 있습니다.
'MySQL > MySQL SQL기초' 카테고리의 다른 글
MySQL SQL Null을 다른 값으로 변환하는 다양한 함수 (0) | 2022.06.16 |
---|---|
MySQL SQL 활용 기초 CASE 문 (0) | 2022.06.16 |
MySQL Null 기초 (0) | 2022.06.15 |
댓글