索引
索參考于幫助快速過濾或查找資料,
目前 Doris 主要支持兩類索引:
? 內建的智能索引:包括前綴索引和 ZoneMap 索引,
? 用戶創建的二級索引:包括 Bloom Filter 索引 和 Bitmap倒排索引,
其中 ZoneMap 索引是在列存格式上,對每一列自動維護的索引資訊,包括 Min/Max,Null 值個數等等,這種索引對用戶透明,
前綴索引
doris中,對于前綴索引有如下約束:
- 他的索引鍵最大長度是36個位元組
- 當他遇到了varchar資料型別的時候,即使沒有超過36個位元組,也會自動截斷

doris為這個表創建前綴索引時,它生成的索引鍵如下:
user_id(8 Bytes) + age(4 Bytes) + message(prefix 24 Bytes)
以下表中我們定義了:age,user_name,message作為表的key

那么,doris為這個表創建前綴索引時,它生成的索引鍵如下:
age(4 Bytes) +user_name(20 Bytes)
-- 雖然還沒有超過36個位元組,但是已經遇到了一個varchar欄位,它自動截斷,不會再往后面取了
當我們的查詢條件,是前綴索引的前綴時,可以極大的加快查詢速度,
SELECT * FROM table WHERE user_id=1829239 and age=20
-- 該查詢的效率會遠高于以下查詢:
SELECT * FROM table WHERE age=20;
Bloom Filter 索引

- Bloom Filter 本質上是一種位圖結構,用于判斷一個值是否存在
- 會產生小概率的誤判,因為hash演算法天生的碰撞
- 在doris中是以tablet為粒度創建的,給每一個tablet創建一個布隆過濾器索引
創建BloomFilter索引
- 建表的時候指定
PROPERTIES (
"bloom_filter_columns"="name,age,uid"
)
- alter修改表的時候指定
ALTER TABLE sale_detail_bloom SET ("bloom_filter_columns" = "k1,k3");
ALTER TABLE sale_detail_bloom SET ("bloom_filter_columns" = "k1,k4");
ALTER TABLE sale_detail_bloom SET ("bloom_filter_columns" = "");
-- 查看BloomFilter索引
SHOW CREATE TABLE sale_detail_bloom \G;
-- 修改/洗掉BloomFilter索引
ALTER TABLE sale_detail_bloom SET ("bloom_filter_columns" = "customer_id,saler_id");
Doris BloomFilter適用場景
滿足以下幾個條件時可以考慮對某列建立Bloom Filter 索引:
- BloomFilter是在無法利用前綴索引的查詢場景中,來加快查詢速度的,
- 查詢會根據該列高頻過濾,而且查詢條件大多是 in 和 = 過濾,
- 不同于Bitmap, BloomFilter適用于高基數列,比如UserID,因為如果創建在低基數的列上,比如 “性別” 列,則每個Block幾乎都會包含所有取值,導致BloomFilter索引失去意義,欄位隨機
Doris BloomFilter使用注意事項 - 不支持對Tinyint、Float、Double 型別的列建Bloom Filter索引,
- Bloom Filter索引只對 in 和 = 過濾查詢有加速效果,
- 可以通過explain來查看命中了哪種索引 --沒辦法查看
Bitmap 索引
用戶可以通過創建bitmap index 加速查詢

創建索引
在table1 上為siteid 創建bitmap 索引
CREATE INDEX [IF NOT EXISTS] index_name ON table1 (siteid) USING BITMAP COMMENT 'balabala';
create index 索引名稱 on 表名(給什么欄位創建bitmap索引) using bitmap COMMENT 'balabala';
create index user_id_bitmap on sale_detail_bloom(sku_id) USING BITMAP COMMENT '使用user_id創建的bitmap索引';
-- 查看索引
SHOW INDEX FROM example_db.table_name;
-- 洗掉索引
DROP INDEX [IF EXISTS] index_name ON [db_name.]table_name;
注意事項
- bitmap 索引僅在單列上創建,
- bitmap 索引能夠應用在 Duplicate、Uniq 資料模型的所有列和 Aggregate模型的key列上,
- bitmap 索引支持的資料型別如下:(老版本只支持bitmap型別)
TINYINT,SMALLINT,INT,BIGINT,CHAR,VARCHAR,DATE,DATETIME,LARGEINT,DECIMAL,BOOL- bitmap索引僅在 Segment V2 下生效(Segment V2是升級版本的檔案格式),當創建 index 時,表的存盤格式將默認轉換為 V2 格式
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/553673.html
標籤:大數據
下一篇:返回列表
