SQL Server2014 雜湊索引原理
SQL Server 2014推出的的新索引型別叫做 hash index。介紹hash index之前一定要介紹雜湊函式這樣會讓大家更明白雜湊索引的原理
當一個key-value鍵值對傳遞給一個雜湊函式的時候,經過雜湊函式的計算之後,根據結果會把key-value鍵值對放在合適的hash buckets(雜湊儲存桶)裡
舉個例子
我們假設對10取模( % 10 )就是雜湊函式。如果key-value鍵值對的key是1525 ,傳遞到雜湊函式,那麼1525 會存放在第五個bucket裡
因為5 as 1525 % 10 = 5。
同樣,537 會存放在第七個bucket ,2982 會存放在第二個bucket ,依次類推
同樣,在hash index裡面,雜湊索引列會被傳遞給雜湊函式做匹配(類似於java裡面的HashMap的Map操作),匹配成功之後,
索引列會被儲存在匹配到的hash bucket裡面的表裡,這個表裡會有實際的資料行指標,再根據實際的資料行指標查詢對應的資料行。
概括來說,要查詢一行資料或者處理一個where子句,SQL Server引擎需要做下面幾件事
1、根據where條件裡面的引數生成合適的雜湊函式
2、索引列進行匹配,匹配到對應hash bucket,找到對應hash bucket意味著也找到了對應的資料行指標(row pointer)
3、讀取資料
雜湊索引比起B樹索引簡單,因為它不需要遍歷B樹,所以訪問速度會更快
雜湊函式和相應語法的例子
CREATE TABLE dbo.HK_tbl ( [ID] INT IDENTITY(1, 1) NOT NULL PRIMARY KEY NONCLUSTERED HASH WITH ( BUCKET_COUNT = 100000 ) , [Data] char(32) COLLATE Latin1_General_100_BIN2 NULL , [dt] datetime NOT NULL, ) WITH ( MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA);
在SQL Server 2014裡面,記憶體最佳化表建立完之後就不能再加雜湊索引了,但是在 SQL Server 2016 裡支援表建立完之後新增雜湊索引,不過
新增雜湊索引是一個離線操作。
雜湊索引的Bucket 數量
( BUCKET_COUNT = 100000 )定義了雜湊索引能夠使用的BUCKET數量,這個Bucket 是固定的並且由使用者指定Bucket 數量,
而不是執行查詢的時候由SQL Server決定生成的Bucket 數量。BUCKET數量總是2的次方的四捨五入( 1024, 2048, 4096 etc..)
BUCKET_COUNT 的數量一定要設定合適,否則雜湊衝突太多,反而效能會下降
SQL Server2014的雜湊索引其實跟MySQL的自適應雜湊索引原理其實差不多,都是為了擺脫B樹的束縛,使查詢效率更快
How does a relational database work這篇文章也有描述hash join的原理,大家可以看一下
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1795/viewspace-2812955/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 雜湊索引索引
- 雜湊表(雜湊表)原理詳解
- 雜湊表的原理
- mysql中雜湊索引的使用限制MySql索引
- 雜湊索引在MySQL中的探究索引MySql
- Hash,雜湊,雜湊?
- Python:說說字典和雜湊表,雜湊衝突的解決原理Python
- 雜湊競猜遊戲的原理遊戲
- 七夕也要學起來,雜湊雜湊雜湊!
- 什麼是雜湊演算法?雜湊競猜遊戲開發原理詳解演算法遊戲開發
- 雜湊
- 掌握4種SQL索引型別,剖析索引原理SQL索引型別
- 【尋跡#3】 雜湊與雜湊表
- js 雜湊雜湊值的模組JS
- 雜湊競猜開發原理丨雜湊競猜遊戲原始碼丨雜湊競猜系統開發設計程式碼遊戲原始碼
- 問答丨如何理解雜湊表的工作原理?
- 雜湊競猜遊戲系統搭建原理方案遊戲
- 雜湊競猜遊戲系統構造原理遊戲
- 樹雜湊
- 2024.3.26 雜湊
- 雜湊碰撞
- 字串雜湊字串
- 雜湊表
- Sql Server2014資料庫清理日誌SQLServer資料庫
- 雜湊表2
- 雜湊衝突
- 字串雜湊表字串
- 雜湊函式函式
- 安全的雜湊
- 異或雜湊
- redis之雜湊Redis
- 6.7雜湊表
- 關於雜湊
- 雜湊競猜遊戲系統開發原理丨雜湊遊戲系統開發技術方案丨雜湊競猜遊戲開發原始碼搭建遊戲開發原始碼
- 雜湊競猜遊戲系統開發原理方案探究遊戲
- Mysql InnoDB B+樹索引和雜湊索引的區別? MongoDB 為什麼使用B-樹?MySql索引MongoDB
- 雜湊技術【雜湊表】查詢演算法 PHP 版演算法PHP
- 幾道和雜湊(雜湊)表有關的面試題面試題