2016-12-31 1 views
2

성능 향상을 위해 데이터베이스 테이블마다 색인을 생성하지 않아도되는 이유가 있습니까? 모든 테이블이 기본적으로 자동으로 테이블을 가질 이유가있을 것입니다. 데이터베이스 테이블의 인덱스에 대한 단점은 무엇입니까?

나는 테이블에 2016 년

+0

간단한 대답은 테이블에'SELECT'보다'INSERT/UPDATE/DELETE'가 더 많을 때입니다. 그러면 테이블에'Index'를 생성하면 효과가 없을 수도 있습니다. –

+0

다른 빼기는 저장소 요구 사항 증가입니다 (인덱스 자체의 경우) , 아마도 인덱스 유지 보수 계획. 2017 년에 색인을 만들 계획입니까? –

+0

1을 확인하십시오. https://social.msdn.microsoft.com/Forums/sqlserver/en-US/bd9b36db-7b70-43b8-a971-f6c881cde269/disadvantages-of-clustered-and-nonclustered- indexes? forum = sqlgetstarted 2. http://stackoverflow.com/questions/764210/what-are-the-disadvantages-of-having-many-indices –

답변

9

한 지수는 큰 문제가되지 않습니다 MS SQL 서버를 사용합니다. 기본 키이거나 고유로 선언 된 열 (또는 열의 조합)에 대한 색인이 자동으로 있습니다.

색인에 약간의 오버 헤드가 있습니다. 인덱스 자체는 디스크 및 메모리의 공간을 차지합니다 (사용되는 경우). 따라서 공간이나 메모리가 문제라면 너무 많은 인덱스가 문제가 될 수 있습니다. 데이터가 삽입/업데이트/삭제되면 원래 데이터뿐만 아니라 인덱스도 유지 관리해야합니다. 이렇게하면 업데이트가 느려지고 쿼리 처리에 영향을 줄 수있는 테이블 (또는 테이블의 일부)이 잠 깁니다.

각 테이블의 색인 수가 적습니다. 이들은 전형적인 쿼리로드를 고려하여 설계되어야합니다. 모든 테이블의 모든 열을 인덱싱하면 데이터 수정 속도가 느려집니다. 데이터가 정적 인 경우 문제가되지 않습니다. 그러나 인덱스를 가진 모든 메모리를 먹는 것은 문제가 될 수 있습니다.

+3

너무 많은 인덱스는 컴파일 오버 헤드를 추가하고 교착 상태가 발생할 가능성을 높일 수 있습니다. 다른 데이터 액세스 경로로 인해 –

+1

@TT. . . . 당신은 정확하고 뭔가를 배웠습니다 : https://en.oxforddictionaries.com/explore/number-of-people-is-or-are. –

+0

@GordonLinoff 그래, 나는 그것을 교정하기에는 너무 열심 이었지만 나는 어지러운 의심을 품었다. 당신이 그것을 처음 썼을 때 그것을 봤다. 그리고 그것이 정확했다 :). HNY! –

0

적어도 테이블 당 최소 1 개의 색인을 갖는 것이 좋습니다. 이는 표 기본 키 (예 : IDENTITY 열)에 자동으로 생성됩니다. 그런 다음 일반적으로 외래 키가 색인의 이점을 얻습니다.이 색인은 수동으로 만들어야합니다. WHERE 절에 자주 포함되는 다른 열은 특히 고유 값이 많이 포함 된 경우 인덱싱해야합니다. 성 (낮은 카디널리티)이 2 개의 값만 가질 때와 같이 열을 인덱싱하면 얻을 수있는 이점에 대해 논쟁의 여지가 있습니다. 데이터베이스의 대부분의 테이블에는 테이블의 데이터와이 데이터의 검색 방법에 따라 1 ~ 4 개의 인덱스가 있습니다.

관련 문제