클러스터형 인덱스와 비 클러스터형 인덱스의 차이점
이 질문에는 이미 답변이 있습니다.
index
테이블 에 적절하게 추가 해야하며 도움이 필요합니다.
혼란스럽고 몇 가지 사항을 분명히해야합니다.
non-int
열에 색인을 사용해야합니까 ? 왜 왜 안돼나는 약을 많이 읽었습니다
clustered
및non-clustered
인덱스를 아직 다른 이상을 사용할 때 나는 아직도 결정할 수 없습니다. 좋은 예는 저와 다른 많은 개발자들에게 도움이 될 것입니다.
나는 종종 업데이트되는 열이나 테이블에 색인을 사용해서는 안된다는 것을 알고 있습니다. 주의해야 할 다른 사항은 무엇이며 테스트 단계를 시작하기 전에 그것이 모두 좋은지 어떻게 알 수 있습니까?
실제로 두 가지 문제를 구분해야합니다.
1) 기본 키 는 논리적 구성입니다. 테이블의 모든 행을 고유하고 안정적으로 식별하는 후보 키 중 하나입니다. 실제로는 INT, GUID, 문자열 등 시나리오에 가장 적합한 것을 선택할 수 있습니다.
2) 클러스터링 키 (테이블에서 "클러스터형 인덱스"를 정의하는 열)-이것은 물리적 스토리지 관련 항목이며 작고 안정적이며 계속 증가하는 데이터 유형이 가장 좋습니다.-INT 또는 BIGINT를 기본 옵션으로 사용하십시오.
기본적으로 SQL Server 테이블의 기본 키는 클러스터링 키로도 사용되지만 반드시 그럴 필요는 없습니다!
적용 할 한 가지 규칙은 "정규"테이블 (데이터를 저장하는 데 사용하는 테이블, 조회 테이블 등)에 클러스터링 키가 있어야한다는 것입니다. 실제로 클러스터링 키가 없다는 것은 의미가 없습니다. 사실, 일반적인 믿음과는 달리 클러스터링 키를 사용하면 삽입 및 삭제까지 모든 공통 작업의 속도가 실제로 빨라집니다 (테이블 구성이 다르고 일반적으로 힙 을 사용하는 것 (클러스터링 키가없는 테이블) 보다 더 우수하기 때문에 )
인덱싱의 여왕 인 킴벌리 트립 (Kimberly Tripp) 은 왜 클러스터링 키가 필요한지, 그리고 클러스터링 키로 가장 잘 사용할 수있는 열에 대한 훌륭한 기사를 많이 가지고 있습니다. 테이블 당 하나만 가져 오므로 클러스터링 키뿐만 아니라 올바른 클러스터링 키 를 선택하는 것이 가장 중요합니다 .
- 기본 키 및 / 또는 클러스터 키와 같은 GUID
- 클러스터형 인덱스 토론 계속
- 계속 증가하는 클러스터링 키-클러스터형 인덱스 토론 .......... 다시!
- 디스크 공간이 저렴 합니다. 요점 이 아닙니다 !
마크
클러스터형 인덱스는 행이 저장되는 방식을 변경합니다. 열 (또는 여러 열)에 클러스터형 인덱스를 만들면 SQL Server는 해당 열을 기준으로 테이블의 행을 정렬합니다. 그것은 전체 단어에서 모든 단어가 알파벳 순서로 정렬되는 사전과 같습니다.
반면 비 클러스터형 인덱스는 행이 테이블에 저장되는 방식을 변경하지 않습니다. 인덱싱을 위해 선택된 열과 데이터를 포함하는 테이블 행에 대한 포인터를 포함하는 완전히 다른 개체를 테이블 내에 만듭니다. 책의 마지막 페이지에있는 색인과 비슷합니다. 키워드는 정렬되어 있으며 페이지 번호는 책의 자료에 대해 더 빨리 참조 할 수 있도록 포함되어 있습니다.
SQL Server 성능을 향상 시키려면 인덱스를 사용해야합니다. 일반적으로 이는 테이블에서 행을 찾는 데 사용되는 열이 색인화됨을 의미합니다.
클러스터 된 인덱스는 SQL 서버가 인덱스 순서에 따라 디스크의 행을 정렬합니다. 이는 클러스터 된 인덱스 순서로 데이터에 액세스하면 데이터가 올바른 순서로 디스크에 있음을 의미합니다. 그러나 클러스터형 인덱스가있는 열을 자주 변경하면 디스크에서 행이 이동하여 오버 헤드가 발생하므로 일반적으로 좋은 생각이 아닙니다.
많은 인덱스를 갖는 것도 좋지 않습니다. 유지비가 듭니다. 따라서 분명한 것부터 시작한 다음 어떤 것을 놓치고 혜택을 볼 수 있는지 프로파일하십시오. 처음부터 필요하지 않으며 나중에 추가 할 수 있습니다.
인덱싱 할 때 대부분의 열 데이터 유형을 사용할 수 있지만 큰 열보다 작은 열을 색인화하는 것이 좋습니다. 또한 열 그룹 (예 : 국가 + 도시 + 거리)에 대한 색인을 만드는 것이 일반적입니다.
또한 테이블에 약간의 데이터가있을 때까지 성능 문제를 알 수 없습니다. 또한 고려해야 할 또 다른 사항은 SQL 서버가 올바른 방식으로 쿼리 최적화를 수행하기 위해 통계가 필요하다는 것입니다. 따라서이를 생성해야합니다.
비 클러스터형 인덱스와 클러스터형 인덱스의 비교
비 클러스터형 인덱스의 예로 EmployeeID 열에 비 클러스터형 인덱스가 있다고 가정하겠습니다. 비 클러스터형 인덱스는
직원 ID
그리고 그 값이 실제로 저장된 Employee 테이블의 행에 대한 포인터. 그러나 클러스터 된 인덱스는 실제로 특정 EmployeeID에 대한 행 데이터를 저장하므로 EmployeeID가 15 인 쿼리를 실행하는 경우 테이블의 다른 열의 데이터는
EmployeeName, EmployeeAddress 등
. 실제로는 클러스터 된 인덱스 자체의 리프 노드에 저장됩니다.
즉, 클러스터되지 않은 인덱스를 사용하면 테이블의 행에 대한 포인터를 따라 다른 원하는 값을 검색하는 데 추가 작업이 필요합니다. 클러스터형 인덱스는 행에 저장되어 있기 때문에 행에 직접 액세스 할 수 있습니다. 클러스터형 인덱스 자체와 동일한 순서입니다. 따라서 클러스터 된 인덱스에서 읽는 것이 일반적으로 비 클러스터형 인덱스에서 읽는 것보다 빠릅니다.
일반적으로 기본 키 (기본적으로 클러스터형 인덱스가 있음)와 같이 테이블을 검색하는 데 사용할 열에 인덱스를 사용하십시오. 예를 들어 (의사 코드로) 쿼리가있는 경우
SELECT * FROM FOO WHERE FOO.BAR = 2
FOO.BAR에 색인을 넣을 수 있습니다. 정렬에 사용될 열에 클러스터형 인덱스를 사용해야합니다. 클러스터 된 인덱스는 디스크에서 행을 정렬하는 데 사용되므로 테이블 당 하나만 가질 수 있습니다. 예를 들어 검색어가있는 경우
SELECT * FROM FOO ORDER BY FOO.BAR ASCENDING
FOO.BAR에서 클러스터 된 인덱스를 고려할 수 있습니다.
아마도 가장 중요한 고려 사항은 쿼리에 걸리는 시간입니다. 쿼리 시간이 오래 걸리거나 자주 사용되지 않으면 인덱스를 추가 할 가치가 없습니다. 항상 그렇듯이 먼저 프로파일 링 한 다음 최적화하십시오. SQL Server Studio는 최적화 할 위치에 대한 제안을 제공 할 수 있으며 MSDN에는 유용한 정보 1 이 있습니다.
데이터가 인덱스 순서대로 물리적으로 저장되므로 클러스터가 아닌 것보다 읽기 속도가 빠릅니다. (클러스터 인덱스)
quicker for insert and update operation than a cluster index. we can create n number of non cluster index.
참고URL : https://stackoverflow.com/questions/5070529/difference-between-clustered-and-nonclustered-index
'Programing' 카테고리의 다른 글
PCH 오류를 수정하는 방법? (0) | 2020.07.05 |
---|---|
BooleanToVisibilityConverter를 어떻게 반전합니까? (0) | 2020.07.05 |
1440 초 후 phpmyadmin이 로그 아웃 (0) | 2020.07.05 |
html select 요소의 선택된 옵션 값을 검색하고 설정하는 jQuery (0) | 2020.07.05 |
Android 패키지 제거 대화 상자를 표시하는 adb 쉘 명령 (0) | 2020.07.05 |