分散式資料庫索引能力大調研
索引,是資料庫中非常重要的一類物件。在資料庫中增加索引,是常見的一種最佳化手段,特別是對於查詢語句的最佳化,很多都可以透過增加索引方式來解決。在分散式資料庫情況下,索引又有所不同,其較單機或集中式資料庫在設計、管理、最佳化方面有一定的差異。本文針對國內主流的一些分散式資料庫,針對索引功能做了個小調研,希望對大家能有所幫助。這裡特別感謝來自奧神貝斯、平凱星辰、阿里雲、騰訊雲、金篆信科、萬里開源老師的協助。
1. 索引概述
1).索引優點與缺點
索引作為一種可選的資料結構,可有效提升基於索引欄位的查詢效能,使用者可根據業務自身需求進行選擇。其優點非常明顯,即在不修改SQL語句的前提下可以加速查詢,其原理是因為透過掃描索引減少了對原表的訪問,進而節省了查詢IO,提升效能。但索引也不是什麼“銀彈”,其缺點非常明顯,索引作為一種資料庫的結構,只要佔據儲存空間並會導致資料維護成本的提高。此外,隨著業務調整變化,原索引也需要人工維護。
2).分散式下索引特殊性
在分散式資料庫中,資料是採用分片方式儲存,即表中的資料存在在不同節點上。在索引中需要記錄索引列及對應在原表中的位置,故其使用維護成本是比較高的。而且資料的拆分情況下,資料規模減少了很多,是否還需要透過索引加速訪問也值得商榷。很多單機或集中式資料庫遷移到分散式資料庫時,其對應的索引策略是不建議直接平移過來,需要結合分片設計做單獨考慮。
3).索引使用建議
如何更好地使用索引,有一些通用的建議:
-
索引建立,應遵循最左字首原則。
-
儘量選擇基數較高的欄位,所謂索引欄位。
-
為經常參加過濾、關聯、排序的欄位建立索引。
-
可以利用覆蓋索引,有效避免回表操作。
針對分散式資料庫中的索引,有些不同的建議:
-
減少不必要的全域性索引,因為其維護代價很高。
-
在資料分片下,資料規模進一步縮小,需考慮建立索引的必要性。
2. 索引能力大對比
近些年來,國內湧現出一大批分散式資料庫產品,其架構不同、功能各異。使用者在使用時,面臨一個普遍問題就是選型,作為重要的考察功能之一,索引也是大家非常關注的一點。這裡針對國內的一些主流分散式資料庫在索引功能上的情況,做了個簡單調研。
[1] TiDB中的索引都被認為是全域性索引,故不存在本地索引說法
1).索引型別
這裡談的索引型別,是指索引是否有獨立的資料分佈模式。也就是說,索引是否是按照跟表相同的資料分佈方式,還是自己獨立一套。前者通常被稱為本地索引、區域性索引,後者則被稱為全域性索引、二級索引等。對於本地索引而言,由於其資料分佈與表相同,因此如果想使用使用是需要配合分割槽鍵的,能精確定位到分割槽的場景。對於全域性索引而言,則沒有這個限制,可以按照非分割槽鍵的維度進行查詢。通常全域性索引也是使用在不包含分割槽鍵的多維度查詢場景。當然其付出的代價也很大,每一筆資料都有可能會演化為跨機的分散式事務,對資料庫的吞吐、延時等都會造成影響。這裡可參考下網上一篇評測報告。因此通常建議嚴格區分場景,優先使用本地索引來解決,確實不能解決的再考慮全域性索引,但也要嚴格控制全域性索引的個數。從產品上來看,大部分分散式資料庫產品都支援了全域性索引,這也是為了迎合使用者之前基於單機/集中式資料庫的使用習慣。當然這裡還是強調下,在分散式資料庫中不能一味遷就原有的結構設計,為了獲得效能與效率的平衡,是需要考慮在應用側做些妥協的。這裡需要注意的是 TiDB,因其資料天然具備的自動拆分特點,其索引都可被視為全域性索引。
2).支援表型別
在分散式資料庫中,索引支援在哪些表中建立。很多分散式資料庫支援建立分割槽表(或叫分片表),也支援建立非分割槽表。對應的索引是否支援在不同型別的表上建立。一般情況下,分割槽表上可以建立分割槽索引(可能是全域性的或本地的),非分割槽表沒有建立分割槽索引的意義。從產品來看,大部分產品都支援在不同型別的表上建立索引。TiDB 因其自身技術設計,其表都為分割槽表,因此不涉及這個問題。
3).索引唯一性
唯一索引可以確保表中的某個欄位(或組合)的唯一性。在分散式資料庫中,由於資料分片儲存,確保唯一性是個挺難的事。因此大多數情況下,唯一索引是包含分割槽鍵的組合索引,這樣維護的代價相對較小。從產品上看,上述產品都支援了索引的唯一性。
4).索引列個數
索引欄位可支援一個或多個。從產品上看,上述產品都支援單鍵索引和複合索引。
5).索引有序
索引作為一種有序的資料儲存結構,可以按照資料升序順序儲存,也可以按降序儲存,因此建立的索引就有升序索引和降序索引。在進行資料排序類訪問時(如Order By),可利用索引的有序性來提升訪問效能。當訪問操作需要按照不同於索引排序的方式訪問時(如對索引列降序訪問,但只存在升序索引),有的資料庫是可以利用升序索引來解決,有的則只能退化為表掃描方式解決。例如在MySQL 8.0中就支援“Backward index scan”來解決此問題。從產品來看,部分產品支援降序索引,部分產品還不支援。
6).特殊索引
除了常規的 BTree 索引外,有些資料庫還支援特殊型別的索引,這裡舉例如空間索引和函式索引。前者是一種用於加速空間資料的查詢的特殊索引型別,主要應用於地理資訊系統(GIS)和空間資料處理領域;後者則是支援對函式或者表示式做索引。這些能力無疑會擴充套件索引的使用範圍。從產品上看,廠商能力參差不齊,特別是針對空間索引。
7).其他能力
索引的其他能力,這裡列舉了幾種常見的。一是索引提示,針對複雜資料訪問場景或最佳化器尚不穩定時,提示是一種有效的應急/規避手段。上述產品也都支援了此功能。索引合併,是指 Index Merge 功能,大部分產品已經支援,少數產品還不行。索引可見性則是指最佳化器是否忽略該索引,這對於索引維護、系統最佳化有一定幫助,上述產品也都支援了。最後則是索引強一致,這也是對索引的最基本要求,也是資料庫與中介軟體產品的差異,上述產品也都支援。
來自 “ 韓鋒頻道 ”, 原文作者:韓鋒頻道;原文連結:https://mp.weixin.qq.com/s/NVqZ-Y09HoSEIsYvzEgFBQ,如有侵權,請聯絡管理員刪除。
相關文章
- 資料庫租戶能力大調研資料庫
- openGauss 分散式資料庫能力分散式資料庫
- Greenplum資料庫,分散式資料庫,大資料資料庫分散式大資料
- 首個國產分散式資料庫調研:TDSQL產品技術及服務能力排名第一分散式資料庫SQL
- 資料庫調研:memcached資料庫
- 《國產分散式資料庫應用現狀調研報告》閱讀小記分散式資料庫
- 分散式文件儲存資料庫之MongoDB索引管理分散式資料庫MongoDB索引
- 國產資料庫調研之——AntDB資料庫資料庫
- 分散式資料庫分散式資料庫
- 對話巨杉核心研發團隊:分散式資料庫自研之路分散式資料庫
- 【大資料】BigTable分散式資料儲存系統分散式資料庫 | 複習筆記大資料分散式資料庫筆記
- 大資料日知錄 03 叢集 分散式協調大資料分散式
- 分散式資料庫概述分散式資料庫
- 分散式資料庫系列(三)分散式資料庫
- 分散式資料庫系列(二)分散式資料庫
- 分散式資料庫系列(一)分散式資料庫
- 談談資料湖分散式資料治理的資料目錄應具備的四大能力分散式
- 大資料將促進分散式資料庫發展及去Oracle大資料分散式資料庫Oracle
- 分析型資料庫:分散式分析型資料庫資料庫分散式
- 如何對分散式 NewSQL 資料庫 TiDB 進行效能調優分散式SQL資料庫TiDB
- 分散式資料庫 ZNBase 的分散式計劃生成分散式資料庫
- 工信部:加速分散式資料庫等產品研發和應用推廣分散式資料庫
- 《分散式資料庫HBase案例教程》分散式資料庫
- 分散式資料庫管理系列(一)分散式資料庫
- 調研azkaban內部資料庫幾張table資料庫
- 商業化之路怎麼走,一家開源分散式資料庫廠商的答案|愛分析調研分散式資料庫
- 分散式資料庫如何控制資料重複 ?分散式資料庫
- 分散式資料庫火了 開源填補資料庫空白分散式資料庫
- 直播預告丨騰訊雲分散式資料庫TDSQL:產品設計思路與能力 - 墨讀資料庫專題分散式資料庫SQL
- MySQL監控-Datadog資料庫監控調研MySql資料庫
- 分散式資料庫技術論壇分散式資料庫
- “熱搜”中的分散式資料庫分散式資料庫
- 分散式資料庫排序及優化分散式資料庫排序優化
- 聊聊分散式 SQL 資料庫Doris(三)分散式SQL資料庫
- 聊聊分散式 SQL 資料庫Doris(四)分散式SQL資料庫
- 聊聊分散式 SQL 資料庫Doris(六)分散式SQL資料庫
- 聊聊分散式 SQL 資料庫Doris(七)分散式SQL資料庫
- 聊聊分散式 SQL 資料庫Doris(八)分散式SQL資料庫