DBA 圈傳瘋了!用好索引推薦,竟解決 80% 的資料庫問題?
一、課題背景
在老 DBA圈子裡曾流傳一句話,“研究資料庫就是研究索引,索引用好了能解決 80% 的資料庫問題”。這足以看出索引對於關係性資料庫的重要性。
二、原理和關鍵流程
傳統的 SQL 最佳化主要從兩個角度出發:
-
根據 SQL 中使用的欄位,及其條件、關聯、聚合等用法,來判斷是否以及如何建立索引,提高資料檢索和處理效率; -
分析語句的業務邏輯,然後在結構和語法上進行等價改寫,或透過 Hint,指導解析器給出更優的執行計劃。
本課題主要討論 第一種。
既然說到索引推薦,我們先回顧一下索引最佳化時的幾個要點:
-
常用業務邏輯中會根據哪個或哪些欄位做檢索;
-
常用多表關聯中使用到哪個或哪些欄位;
-
表以及對應欄位的統計資訊,也就是資料的分佈情況等統計特徵。
-
SQL 語法解析和語義特徵提取 -
統計特徵提取 -
索引組合生成以及濾除 -
特徵工程 -
模型訓練、最佳化等
2.1 語法解析&語義特徵提取
其中包含 4 個主要的模組級別函式:split,format,parse,parsestream,以及三個很關鍵的基類:Token,TokenList 和 Statement。具體描述和用法就不在本文贅述,有許多資料可供參考。
2.2 統計特徵提取
再進行索引最佳化時,DBA 通常會關注以下指標:
-
表的「總行數」
-
列的「型別」
-
列的「空值個數」
-
列的「不同值個數」
-
以及列的「選擇性」等等
2.3 索引組合
在索引相關的特徵提取完之後,到設計特徵向量之前,還有一步需要處理,就是如何生成完整的候選索引組合,其中包括單列索引和複合索引。
對於單個 SQL,其中每個表的訪問只能使用該表其中一條索引。所以需要針對該 SQL 涉及到的所有表,以及每個表在該 SQL 中的所有具有語義特徵的欄位進行收集,再進行排列,得到單列、雙列、三列索引(注:當前暫時不考慮 >3 列的索引推薦)。
下圖展示了不同索引組合的輸出:
2.4 特徵工程&建模
2.5 模型訓練和預測
三、未來規劃
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70013542/viewspace-3008577/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫索引分裂 問題分析資料庫索引
- 解決hive資料庫 插入資料很慢的問題Hive資料庫
- 資料庫表的唯一索引問題資料庫索引
- 大廠的影片推薦索引構建解決方案索引
- 資料庫層面問題解決思路資料庫
- 【資料庫】解決Mysql資料庫提示innodb表不存在的問題!資料庫MySql
- SqlServer資料庫中文亂碼問題解決SQLServer資料庫
- 研發了 5 年的時序資料庫,到底要解決什麼問題?資料庫
- 不能建立降序索引的問題的解決索引
- 重磅推薦|綠盟資料安全解決方案
- 安裝mysql資料庫及問題解決方法MySql資料庫
- 解決資料庫高併發訪問瓶頸問題資料庫
- 解決AI的小資料問題AI
- 介面測試時依賴前置資料的問題解決了...
- SSM解決中文存入資料庫亂碼問題(記錄自己的問題)SSM資料庫
- 解決pl/sql developer中資料庫插入資料亂碼問題SQLDeveloper資料庫
- 解決linux下redis資料庫overcommit_memory問題LinuxRedis資料庫MIT
- 資料庫連結時的時區問題serverTimezone永久解決資料庫Server
- 資料庫系列:大廠使用資料庫中介軟體解決什麼問題?資料庫
- 如何解決資料庫配置問題資料庫
- 不推薦別的了,IDEA 自帶的資料庫工具就很牛逼!Idea資料庫
- 資料庫運維的那些難題,深信服DMP給解決了資料庫運維
- 解決Mysql資料庫插入資料出現問號(?)的解決辦法MySql資料庫
- 如何用好圖資料庫資料庫
- 求你了,別再說資料庫鎖的只是索引了!!!資料庫索引
- 用好學習排序 (LTR) ,資訊資訊流推薦效果翻倍排序
- Laravel 安裝 voyager 出現的資料庫報錯問題解決Laravel資料庫
- 推薦學Java——初識資料庫Java資料庫
- 推薦一個好用的資料庫SDK—deepsql資料庫SQL
- 千萬級資料庫使用索引查詢速度更慢的疑惑-資料回表問題資料庫索引
- 問題解決:構建基於深度學習架構的推薦系統!深度學習架構
- 【虹科乾貨】使用記憶體資料庫解決三個資料庫效能問題記憶體資料庫
- openGauss-索引推薦索引
- 基於AI+資料驅動的慢查詢索引推薦AI索引
- 資料庫索引,小白連環16問資料庫索引
- Webpack的理解以及解決了的問題Web
- 資料庫高可靠,輕鬆解決事務丟失問題資料庫
- OH解決linux下redis資料庫overcommit_memory問題vlrLinuxRedis資料庫MIT