인덱스는 쿼리 최적화 및 테이블에서 신속하게 결과를 검색하는 데 중요한 역할을 할 수 있습니다. 따라서 인덱싱 할 열을 선택하는 것이 가장 중요한 단계입니다. 인덱싱을 고려할 수있는 두 가지 주요 위치가 있습니다. WHERE 절에서 참조되는 열과 JOIN 절에서 사용되는 열입니다. 요컨대, 이러한 열은 특정 레코드를 검색하는 데 필요한 인덱싱되어야합니다. SELECT 쿼리가 아래와 같은 인덱스를 사용하는 buyers라는 테이블이 있다고 가정합니다.
SELECT
buyer_id /* no need to index */
FROM buyers
WHERE first_name='Tariq' /* consider to use index */
AND last_name='Iqbal' /* consider to use index */
"buyer_id"는 SELECT 부분에서 참조되므로 MySQL은 선택한 행을 제한하는 데 사용하지 않습니다. 따라서 색인을 생성 할 필요가 없습니다. 아래는 위와 약간 다른 또 다른 예입니다.
SELECT
buyers.buyer_id, /* no need to index */
country.name /* no need to index */
FROM buyers LEFT JOIN country
ON buyers.country_id=country.country_id /* consider to use index */
WHERE
first_name='Tariq' /* consider to use index */
AND
last_name='Iqbal' /* consider to use index */
위의 first_name 쿼리에 따르면 last_name 열은 WHERE 절에있는 그대로 인덱싱 할 수 있습니다. 또한 JOIN 절에 있으므로 country 테이블의 추가 필드 country_id를 인덱싱 할 수 있습니다. 따라서 인덱싱은 WHERE 절 또는 JOIN 절의 모든 필드에서 고려할 수 있습니다.
다음 목록은 테이블에 인덱스를 만들 때 항상 염두에 두어야 할 몇 가지 팁을 제공합니다.
- WHERE 및 ORDER BY 절에 필요한 열만 인덱싱하십시오. 열을 많이 인덱싱하면 몇 가지 단점이 있습니다.
- MySQL의 "인덱스 접두사"또는 "다중 열 인덱스"기능을 활용 해보십시오. INDEX (first_name, last_name)과 같은 인덱스를 생성하는 경우 INDEX (first_name)을 생성하지 마십시오. 그러나 "색인 접두사"또는 "다중 열 색인"은 모든 검색 사례에서 권장되지 않습니다.
- 인덱싱을 고려하는 열에 대해 NOT NULL 속성을 사용하여 NULL 값이 저장되지 않도록하십시오.
- --log-long-format 옵션을 사용하여 인덱스를 사용하지 않는 쿼리를 기록합니다. 이러한 방식으로이 로그 파일을 검사하고 그에 따라 쿼리를 조정할 수 있습니다.
- EXPLAIN 문은 MySQL이 쿼리를 실행하는 방법을 표시하는 데 도움이됩니다. 테이블이 조인되는 방법과 순서를 보여줍니다. 이는 최적화 된 쿼리를 작성하는 방법과 열을 인덱싱해야하는지 여부를 결정하는 데 매우 유용 할 수 있습니다.
업데이트 (2015 년 2 월 23 일) :
모든 인덱스 (양호 / 불량)는 삽입 및 업데이트 시간을 증가시킵니다.
인덱스 (인덱스 수 및 유형)에 따라 결과가 검색됩니다. 색인으로 인해 검색 시간이 증가한다면 그것은 잘못된 색인입니다.
모든 책에서 "색인 페이지"는 장 시작 페이지, 주제 페이지 번호 시작, 하위 주제 페이지 시작을 가질 수 있습니다. 색인 페이지의 일부 설명이 도움이되지만 더 자세한 색인은 혼란 스럽거나 겁을 줄 수 있습니다. 인덱스에도 메모리가 있습니다.
인덱스 선택은 현명해야합니다. 모든 열에 색인이 필요한 것은 아닙니다.