데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

In-memory optimized table 사용되는 Hash Index

 

·         Version : SQL Server 2014 later

 

SQL Server에서 새롭게 추가된 Hash Index(해시 인덱스)  In-Memory optimized table(인메모리 최적화 테이블)에서 사용된다기본적으로 테이블의 행을 빠르게 찾고 읽으려면 인덱스가 필요하다.

해시 인덱스는 버킷의 컬렉션은 배열(Array) 구성된다해시 함수는 인덱스 키를 해시 인덱스의 해당 버킷으로 매핑한다아래 그림은  개의 인덱스가 해시 함수를 사용하여 해시 인덱스에 있는  개의 서로 다른 버킷에 매핑되는것을 나타낸다아래 그림에서 해시 함수 이름은 f(x)이다.

 


해시 인덱스에 사용되는 해시 함수의 특징은 아래와 같다.

·         SQL Server에는 모든 해시 인덱스에 사용되는 하나의 해시 함수가 있다.

·         해시 함수는 결정적이다동일한 인덱스 키는 항상 해시 인덱스의 동일한 버킷에 매핑된다.

·         여러 인덱스 키는 동일한 해시 버킷에 매핑할  있다.

·         해시 함수는 균형을 이룬다해시 버킷에 대한 인덱스 키값의 분포는 일반적으로 포아송 분포를 따른다.

 

포아송 분포는 균등한 분포가 아니다인덱스  값은 해시 버킷에 균등하게 분포되지 않는다예를 들어 n개의 해시 버킷에 대한 n개의 고유인덱스 키의 포아송 분포는 버킷을 대략적으로 삼등분 한다삼등분된 버킷 부분에는 공백하나의 인덱스  개의 인덱스 키가 각각 포함된다소수의 버킷에  개이상의 키가 포함된다두개의 인덱스 키가 동일한 해시 버킷에 매핑되면 해시 충돌(Collision) 발생한다 많은 숫자의 해시 충돌은 읽기 작업의 성능에 영향을 준다.

 

인메모리 해시 인덱스 구조는 메모리 포인터의 배열로 구성된다 버킷은  배열의 오프셋에 매핑된다배열의  버킷은 해당 해시 버킷의  번째 행을 가리킨다버킷의  행은  다음 행을 가리키기 때문에 다음 그림과 같이  해시 버킷에 대한  체인이 만들어 진다아래 그림은 행이 포함된  개의 버킷이 있다.

 


 위에서 두번째 버킷에는  개의 빨간색 행이 포함된다 번째 버킷에는 하나의 파란색 행이 포함된다 아래 버킷에는  개의 녹색 행이 포함된다이러한 행동은 동일한 행의 서로 다른 버전일  있다.

 

 

[참고자료]

https://docs.microsoft.com/en-us/sql/database-engine/hash-indexes?view=sql-server-2014

 

 

2018-08-29 / Sungwook Kang / http://sqlmvp.kr

 

SQL Server, MSSQL, Hash Index, 해시 인덱스인모메리 최적화 테이블, In-memory optimized table



출처: https://sqlmvp.tistory.com/1269?category=618825 [Database Lab]
No. Subject Author Date Views
2163 Azure VM에서 SQL Server에 대한 저장소 구성 지침 jevida(강성욱) 2019.03.26 895
2162 Azure SQL에 도입된 새로운 집계 함수 APPROX_COUNT_DISTINCT jevida(강성욱) 2019.03.26 672
2161 Azure SQL의 데이터베이스 소유권 체인 jevida(강성욱) 2019.03.26 787
2160 Azure SQL의 내부 디스크 할당 방법 및 저장 가능 용량 확인 jevida(강성욱) 2019.03.26 808
2159 Azure SQL에서 이메일 보내기 jevida(강성욱) 2019.03.26 682
2158 Azure SQL에서 읽기 전용 복제본에 대한 접속 및 링크 서버 생성 jevida(강성욱) 2019.03.26 798
2157 Azure SQL에서 네트워크를 구성하는 방법 jevida(강성욱) 2019.03.26 535
2156 인덱스 재구성과 통계 업데이트시 발생하는 SQL Server Block jevida(강성욱) 2019.03.26 787
2155 SQL Server Scala UDF Inline 기능을 사용한 쿼리 성능 향상 jevida(강성욱) 2019.03.26 655
2154 SQL Server 가용성 그룹에 데이터베이스 자동으로 추가하기 jevida(강성욱) 2019.03.26 649
2153 SQL Server MySQL PostgreSQL 비교 jevida(강성욱) 2019.03.26 1137
2152 SQL Server 복잡한 쿼리가 옵티마이저에 미치는 영향과 옵티마이저 timeout jevida(강성욱) 2019.03.26 704
2151 SQL Server 2019 에서 문자열 잘림에 대한 향상된 에러 메시지 반환 jevida(강성욱) 2019.03.26 477
2150 SQL Server 2019 에서 업그레이드된sp_estimate_data_compression_savings 프로시저 (컬럼스토어 압축율 예상) jevida(강성욱) 2019.03.26 584
2149 SQL Server 2019 에서 추가된sys.dm_db_page_info, sys.fn_PageResCracker 기능으로 대기 관련 정보 확인 jevida(강성욱) 2019.03.26 855
2148 SQL Server 2019에서 향상된 Rowstore batch mode jevida(강성욱) 2019.03.26 455
2147 SQL Server 2016부터 도입된 USE HINT를 사용한 추적 플래그 활성화 jevida(강성욱) 2019.03.26 488
» In-memory optimized table에 사용되는 Hash Index jevida(강성욱) 2019.03.26 415
2145 VM환경에서 AG를 구성하였을때VSS 백업 동작 변경 jevida(강성욱) 2019.03.25 422
2144 SQL Server 2016 향상된 가용성 그룹 – 데이터베이스 수준의 상태 탐지 장애조치 jevida(강성욱) 2019.03.25 451





XE Login