source

클러스터된 인덱스와 비클러스터된 인덱스의 차이

lovecheck 2023. 5. 7. 11:34
반응형

클러스터된 인덱스와 비클러스터된 인덱스의 차이

적절한 추가가 필요합니다.index도움이 필요해요

저는 혼란스럽고 몇 가지 사항을 명확히 할 필요가 있습니다.

  • 다음에 인덱스를 사용해야 합니까?non-int 열? 열?/왜 안됩니까?

  • ▁a니읽▁▁lot▁i습었'에 대해 많이 읽었습니다.clustered그리고.non-clustered색인은 아직도 다른 색인보다 언제 사용할지 결정할 수 없습니다.좋은 예가 나와 다른 많은 개발자들에게 도움이 될 것입니다.

자주 업데이트되는 열 또는 표에 인덱스를 사용하면 안 된다는 것을 알고 있습니다.테스트 단계에 들어가기 전에 또 어떤 점에 주의해야 하며 모든 것이 정상인지 어떻게 알 수 있습니까?

클러스터된 인덱스는 행이 저장되는 방식을 변경합니다.열(또는 여러 열)에 클러스터된 인덱스를 만들면 SQL Server는 해당 열을 기준으로 테이블의 행을 정렬합니다.모든 단어가 책 전체에서 알파벳 순으로 정렬되는 사전과 같습니다.

그러나 비클러스터형 인덱스는 행이 테이블에 저장되는 방식을 변경하지 않습니다.색인화를 위해 선택한 열과 데이터를 포함하는 테이블의 행에 대한 포인터를 포함하는 완전히 다른 개체를 테이블 내에 만듭니다.이것은 책의 마지막 페이지에 있는 색인과 같은 것으로, 키워드가 정렬되고 더 빨리 참조할 수 있도록 책의 자료에 페이지 번호를 포함합니다.

두 가지 문제를 구분해야 합니다.

기본 키는 테이블의 모든 행을 고유하고 안정적으로 식별하는 후보 키 중 하나인 논리 구조입니다.INT, GUID, 문자열 등 시나리오에 가장 적합한 항목을 선택할 수 있습니다.

클러스터링 키(테이블의 "클러스터 인덱스"를 정의하는 열 또는 열)는 물리적 스토리지와 관련된 것입니다. 여기서는 작고 안정적이며 지속적으로 증가하는 데이터 유형인 INT 또는 BIGINT를 기본 옵션으로 선택하는 것이 좋습니다.

기본적으로 SQL Server 테이블의 기본 키는 클러스터링 키로도 사용되지만 클러스터링 키로 사용될 필요는 없습니다!

적용할 수 있는 한 가지 규칙은 다음과 같습니다. "일반" 테이블(데이터를 저장하는 데 사용하는 테이블, 즉 조회 테이블 등)에는 클러스터링 키가 있어야 합니다.클러스터링 키가 없으면 의미가 없습니다.사실 일반적인 믿음과는 달리 클러스터링 키를 사용하면 삽입 및 삭제(테이블 구성이 을 사용하는 것보다 다르며 일반적으로 클러스터링 키가 없는 테이블)를 포함한 모든 공통 작업 속도가 향상됩니다.

인덱싱의 여왕 킴벌리 트립은 클러스터링 키를 사용해야 하는 이유와 클러스터링 키로 가장 잘 사용해야 하는 열 유형에 대한 훌륭한 기사를 많이 가지고 있습니다.테이블당 하나만 제공되므로 클러스터링 키뿐만 아니라 올바른 클러스터링 키를 선택하는 것이 가장 중요합니다.

마르크

SQL 서버 성능을 향상시키려면 인덱스를 사용해야 합니다.일반적으로 이는 테이블에서 행을 찾는 데 사용되는 열이 인덱싱된다는 것을 의미합니다.

클러스터된 인덱스는 SQL 서버가 인덱스 순서에 따라 디스크의 행을 정렬하도록 합니다.즉, 클러스터된 인덱스의 순서로 데이터에 액세스하면 데이터가 올바른 순서로 디스크에 표시됩니다.그러나 클러스터된 인덱스가 있는 열을 자주 변경하면 행이 Disk에서 이동하여 오버헤드가 발생합니다. 일반적으로 이는 좋은 방법이 아닙니다.

인덱스가 많은 것도 좋지 않습니다.유지보수 비용이 듭니다.따라서 분명한 것부터 시작하여 어떤 것을 놓치고 어떤 것이 혜택을 받을 수 있는지 프로파일링하십시오.처음부터 필요하지 않으며 나중에 추가할 수 있습니다.

대부분의 열 데이터 유형은 인덱싱할 때 사용할 수 있지만 큰 열보다 작은 열이 인덱싱되는 것이 좋습니다.또한 열 그룹(예: 국가 + 도시 + 거리)에 인덱스를 만드는 것이 일반적입니다.

또한 테이블에 상당한 양의 데이터가 저장될 때까지 성능 문제를 발견할 수 없습니다.SQL 서버가 쿼리 최적화를 올바르게 수행하기 위해서는 통계가 필요하므로 반드시 생성해야 합니다.

비클러스터형 인덱스와 클러스터형 인덱스의 예제 비교

비클러스터형 인덱스의 예로 직원에 비클러스터형 인덱스가 있다고 가정해 보겠습니다.ID 열.비클러스터형 인덱스는 두 값을 모두 저장합니다.

직원아이디

또한 해당 값이 실제로 저장된 Employee 테이블의 행에 대한 포인터입니다.그러나 클러스터된 인덱스는 실제로 특정 직원에 대한 행 데이터를 저장합니다.ID – 직원을 찾는 쿼리를 실행하는 경우15의 ID, 표의 다른 열의 데이터는 다음과 같습니다.

사원명, 사원주소 등

모두 실제로 클러스터된 인덱스 자체의 리프 노드에 저장됩니다.

즉, 클러스터된 인덱스 자체와 동일한 순서로 저장되므로 행에 직접 액세스할 수 있는 클러스터된 인덱스와 달리 비클러스터된 인덱스의 경우 해당 포인터를 테이블의 행으로 이동하여 원하는 값을 검색해야 합니다.따라서 일반적으로 클러스터된 인덱스에서 읽는 것이 클러스터되지 않은 인덱스에서 읽는 것보다 빠릅니다.

일반적으로 기본 키(기본적으로 클러스터된 인덱스가 있음)와 같이 테이블을 검색하는 데 사용할 열의 인덱스를 사용합니다.예를 들어 쿼리가 있는 경우(의사 코드)

SELECT * FROM FOO WHERE FOO.BAR = 2

당신은 FOO에 색인을 붙이는 것이 좋을 것입니다.BAR. 정렬에 사용할 열에 클러스터된 인덱스를 사용해야 합니다.클러스터된 인덱스는 디스크의 행을 정렬하는 데 사용되므로 테이블당 하나만 가질 수 있습니다.예를 들어 쿼리가 있는 경우

SELECT * FROM FOO ORDER BY FOO.BAR ASCENDING

FOO의 클러스터된 인덱스를 고려하는 것이 좋습니다.BAR.

아마도 가장 중요한 고려 사항은 쿼리에 소요되는 시간입니다.쿼리가 시간이 많이 걸리지 않거나 자주 사용되지 않으면 인덱스를 추가할 가치가 없을 수 있습니다.항상 그렇듯이 먼저 프로파일링한 다음 최적화합니다.SQL Server Studio는 최적화할 위치에 대한 제안을 제공할 수 있으며 MSDN에는 유용할 수 있는 몇 가지 정보1이 있습니다.

데이터가 인덱스 순서로 물리적으로 저장되므로 비클러스터보다 읽기 속도가 빠릅니다. (클러스터 인덱스)

클러스터 인덱스보다 삽입 및 업데이트 작업이 빠릅니다. 클러스터 인덱스가 아닌 인덱스를 여러 개 만들 수 있습니다.

언급URL : https://stackoverflow.com/questions/5070529/difference-between-clustered-and-nonclustered-index

반응형