2013-07-25 2 views
0

오늘 테이블에 SQL 인덱스를 만들지 않을지에 대한 질문을 받았습니다.SQL 인덱스를 사용하는 것이 적절하지 않은 경우

제가 생각할 수있는 유일한 점은 필요하지 않은 경우 (예 : 작은 표)입니다. 그 대답은 옳다고 생각하지 않습니다. 색인을 사용해야 할 때와하지 말아야 할 때를 경계해야합니까?

+0

"이 필드 또는이 테이블에 인덱스를 포함하지 않겠습니까?"또는 "해당 쿼리에서이 특정 인덱스를 사용하지 마십시오"는 의미입니까? – Sethcran

+0

CUD 작업에 대한 질문에 – webdad3

답변

1

당신은 질문에 대답 할 수 있습니다 : 언제 색인이 필요합니까?

항목을 검색하고 결과를 빨리 얻으려면 색인이 필요합니다. 예를 들어 열이 where 절에서 사용되는 경우입니다. 물론 모든 것을 색인하려고 할 수도 있지만 색인을 생성하면 여분의 메모리/하드 디스크가 사용됩니다. 따라서 행을 찾기 위해 사용하는 열만 색인화하십시오.

행을 찾기 위해 MySQL이 읽는 행이 있다면 EXPLAIN command으로 분석 할 수 있습니다.

이 정보가 도움이됩니까?

1

작은 규칙 (약 100'000 행 미만)에서 기본 키의 고유 색인을 제외한 모든 색인을 삭제하는 것이 경험적입니다.

또한 열이 검색 목적이 아닌 경우 (예 : 직원의 급여) 색인을 사용하는 것은 적절하지 않습니다.

4

테이블에 색인을 만들지 않으려면 고려해야 할 사항이 많이 있습니다.

첫째, 만들 수있는 가능한 많은 색인이 있다는 것입니다. 예를 들어, 테이블의 모든 열뿐만 아니라 열의 모든 순열을 포함하는 색인을 만들 수 있습니다 (색인의 열 순서가 중요하기 때문에). 열 개수가 많아지면 엄청난 수의 색인이 될 수 있습니다.

모든 색인에는 여러 가지 방법으로 성능을 저하시키는 여러 가지 항목이 있습니다. 예를 들어, 사용 가능한 메모리/디스크 공간을 사용할 수 있습니다. 아마도 이것보다 더 나쁜 것은 인덱스가 업데이트 될 때 인덱스를 업데이트해야한다는 것입니다. 즉, 테이블의 모든 삽입/업데이트/삭제가 인덱스 업데이트를 트리거 할 수 있습니다. 인덱스가 많을수록 업데이트 할 인덱스가 많아 져 CUD 작업의 성능이 저하 될 수 있으며 이러한 작업을 자주 수행하면 서버 성능이 저하 될 수 있습니다.

이 성능상의 영향으로 인해 '쓸모없는'색인을 사용하지 않으려합니다. 일반적으로 모든 쿼리에 사용되는 인덱스는 양호하지만 1 초 쿼리 <에 대해 하루에 한 번만 사용되는 인덱스는 쓸모가 없습니다. 어떤 인덱스가 사용하기에 충분히 유용하고 성능 이점이 성능 적중보다 큰지를 결정하는 것은 모두 단점입니다.

+0

+1이 업데이트되었습니다. –

관련 문제