MySQL 索引學習筆記

1.二叉樹,紅黑樹,B 樹,B+樹

二叉樹:就是每個節點最多只能有兩個子節點的樹;

紅黑樹:就是自平衡二叉搜索樹,紅黑樹通過一下五個規則構建:

1.節點只能是紅色或黑色;

2.根節點只能是黑色;

3.不能有連續的紅色節點;

4.葉子節點為黑色;

5.從任意節點到其所有葉子節點的路徑上,黑色節點數相同,黑稿平衡

B 樹:多路平衡搜索樹,所有節點都存儲數據;

B+樹:非葉子節點只存鍵,數據全部存在葉子節點;

2.索引的底層數據結構了解過嘛 ?

索引的底層數據結構采用了 B+樹加雙向鏈表的形式實現,N 階 B 樹其實就是每個節點最多存儲 N - 1 個鍵值對和 N 個指針,指向某個鍵值對的一邊,而 N 階 B+ 樹其實就是每個節點最多存儲 N - 1 個鍵和 N 個指針 ,只有葉子節點才存儲鍵值,一旦一個節點存儲的 Key 大于 N,中間元素會向上分裂;

而在索引中的 B+ 樹就是在葉子節點之間構成一個雙向鏈表,用于范圍查詢。

3.什么是聚簇索引什么是非聚簇索引 ?

聚簇索引:一個表只能有一個聚簇索引,聚簇索引的葉子節點直接存儲行數據,主鍵默認是聚簇索引,如果沒有主鍵則隱式構建 ROWID,優點是通過索引就可以獲取到數據,避免了回表查詢,缺點是插入速度依賴主鍵順序;

非聚簇索引:就是索引的葉子節點只存主鍵值,而非完整的數據,一個表可以有多個非聚簇索引,通過索引找到主鍵后,需要回到聚簇索引獲取完整數據。

4.知道什么是回表查詢嘛 ?

回表查詢是查詢數據時通過非聚簇索引進行查詢,查詢出來的只是數據的主鍵,還需要通過主鍵去查詢聚簇索引,才能得到完整的數據。

5.索引創建原則有哪些?

1.高頻查詢字段:where,on,order by,group by 等高頻使用的字段;

2.高區分度字段:使用由高區分度的字段,ID,身份證而不是性別;

3.短字段優先:使用整型而不是 VARCHAR;

4.覆蓋索引優化:高頻查詢字段,可以建立聯合索引覆蓋查詢字段,達到不用回表查詢的目的;

5.范圍查詢字段放最后:將范圍查詢字段放最后,避免索引失效;

6.最左前綴匹配原則:只能最左前綴匹配,避免中間斷開;

6.知道什么是左前綴原則嘛 ?

如果索引了多列(聯合索引),要遵守最左前綴法則。最左前綴法則指的是查詢

從索引的最左列開始,并且不跳過索引中的列。如果跳躍某一列,索引將會部分

失效(后面的字段索引失效)。

7.知道什么叫覆蓋索引嘛 ?

覆蓋索引是指查詢使用了索引,并且需要返回的列,在該索引中已經全部能夠找到 。

8.索引是越多越好嘛? 什么樣的字段需要建索引, 什么樣的字段不需要?

索引并不是多多益善,索引越多,維護索引結構的代價也就越大,會影響增刪改的效率。針對于數據量較大,且查詢比較頻繁的表建立索引。

針對于常作為查詢條件(where)、排序(order by)、分組(group by)操作的字段建立索引。

不適合創建索引的字段:

      • 更新頻繁字段不適合創建索引
      • 若是不能有效區分數據的列不適合做索引列(如性別,男女未知,最多也就三種,區分度實在太低)
      • 對于那些查詢中很少涉及的列,重復值比較多的列不要建立索引。比如省會,城市、月份
      • 對于定義為text、image和bit的數據類型的列不要建立索引

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/86763.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/86763.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/86763.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Windows安裝docker及使用

下載 https://www.docker.com/ 安裝 啟動 此時拉取鏡像會報錯 Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) 配置引擎 添加以…

多參表達式Hive UDF

支持的操作符 :跳過,即無條件篩選:等于!:不等于range:區間內,range[n,m]表示 between n and mnrange:區間外,即not between andin:集合內,in(n,m,j,k)表示 in…

GO后端開發內存管理及參考答案

什么是 Go 的逃逸分析(Escape Analysis),為什么需要它? Go 的逃逸分析是一種編譯時技術,用于確定變量的生命周期是否超出其創建的函數作用域。通過分析變量的使用方式,編譯器能夠判斷變量是否需要在堆上分…

未來智能系統演進路線:從AGI到ASI的技術藍圖

引言:智能革命的下一個十年 在AI技術突破性發展的當下,我們正站在通用人工智能(AGI)向人工超級智能(ASI)躍遷的關鍵轉折點。本文將系統解析未來3-10年的技術演進路徑,通過模塊化組件插件&#…

eNSP-Cloud(實現本地電腦與eNSP內設備之間通信)

說明: 想象一下,你正在用eNSP搭建一個虛擬的網絡世界,里面有虛擬的路由器、交換機、電腦(PC)等等。這些設備都在你的電腦里面“運行”,它們之間可以互相通信,就像一個封閉的小王國。 但是&#…

AI Agent 核心策略解析:Function Calling 與 ReAct 的設計哲學與應用實踐

引言 在人工智能助手和自主Agent快速發展的今天,如何讓AI系統不僅能夠理解復雜指令,還能有效地執行任務并適應動態環境,成為技術演進的關鍵問題。本文將深入探討兩種核心的Agent設計策略:Function Calling(函數調用&a…

window下配置ssh免密登錄服務器

window下配置ssh免密登錄服務器 本地windows遠程登錄我的ssh服務器10.10.101.xx服務器,想要每次都免密登錄這個服務器. 記錄下教程,防止后期忘記,指導我實現這個過程。 教程 二、實踐步驟:Windows 上配置 SSH 免密登錄 2.1 確…

樹莓派5實現串口通信教程

1,安裝依賴 確保已經安裝 pyserial: pip3 install pyserial 如果無法用pip3安裝,那就創建一個虛擬環境進行安裝 如果你想安裝最新版本的 pyserial 或其它非 Debian 打包的庫,建議在用戶目錄下創建一個虛擬環境: 安裝…

(五)Linux性能優化-CPU-性能優化

性能優化文章參考倪朋飛老師的Linux性能優化實戰課程 性能優化方法論 Q:怎么評估性能優化的效果? A:對系統的性能指標進行量化,并且要分別測試出優化前、后的性能指標,用前后指標的變化來對比呈現效果。確定性能的量…

ThreadLocal原理及內存泄漏分析

介紹 每個線程內部都有一個私有的 ThreadLocalMap 實例&#xff0c;用于存儲該線程關聯的所有 ThreadLocal 變量。 ThreadLocalMap 內部的 Entry 繼承自 WeakReference<ThreadLocal<?>>。所以**Entry 的 key&#xff08;即 ThreadLocal 對象本身&#xff09;是通…

Oracle OCP認證考試考點詳解083系列18

題記&#xff1a; 本系列主要講解Oracle OCP認證考試考點&#xff08;題目&#xff09;&#xff0c;適用于19C/21C,跟著學OCP考試必過。 86. 第86題&#xff1a; 題目 解析及答案&#xff1a; 86、使用FLASHBACK TABLE的兩個先決條件是什么&#xff1f; A&#xff09;必須對…

git merge合并分支push報錯:Your branch is ahead of ‘xxx‘ by xx commits.

git merge合并分支push報錯&#xff1a;Your branch is ahead of xxx by xx commits. Your branch is ahead of xxx by xx commits.(use "git push" to publish your local commits)解決方案&#xff1a; git checkout 到要合入的分支&#xff0c;然后&#xff1a; …

英語作文模板

核心原則&#xff1a;三段式結構 ?英文: The core principle is a three-paragraph structure (Introductory paragraph Main body paragraph Concluding paragraph).?中文: 核心原則是采用三段式結構&#xff08;開頭引論段 中間主體段 結尾總結段&#xff09;。 模板 …

[安卓按鍵精靈輔助工具]一些安卓端可以用的雷電模擬器adb命令

在雷電論壇上看到很多adb命令&#xff0c;不過并沒有針對安卓按鍵進行處理&#xff0c;這里做了一下測試&#xff0c;把能用在安卓按鍵上的adb命令整理出來。 調用adb命令使用的山海插件中的Execute 執行shell命令 adb命令源碼如下&#xff1a; Import "shanhai.lua&quo…

uni-app項目怎么實現多服務環境切換

前情 uni-app是我比較喜歡的跨平臺框架&#xff0c;它能開發小程序/H5/APP(安卓/iOS)&#xff0c;重要的是對前端開發友好&#xff0c;自帶的IDE可視化的運行和打包也讓開發體驗也非常棒&#xff0c;公司項目就是主推uni-app&#xff0c;現在我的開發模式是用HBuilder X跑項目…

論文閱讀:強化預訓練

大型語言模型 (LLMs) 的驚人能力很大程度上歸功于在海量文本語料庫上進行下一詞元預測 (Next-Token Prediction, NTP) 的規模化訓練。與此同時&#xff0c;強化學習 (Reinforcement Learning, RL) 已成為微調 LLMs、使其與人類偏好對齊或增強特定技能&#xff08;如復雜推理&am…

Java 大視界——Java大數據在智能安防視頻監控中的異常事件快速響應與處理機制

??摘要&#xff1a;?? 在智慧城市和工業4.0浪潮下&#xff0c;智能安防系統日均產生PB級視頻流數據。如何在實時性、準確性、成本三者間取得平衡&#xff0c;成為行業核心挑戰。本文將深入探討??Java技術棧在大規模視頻分析系統中的核心作用??&#xff1a;基于FlinkJav…

華為云Flexus+DeepSeek征文| 基于Dify-LLM平臺應用實踐:創建智能知識庫問答助手

華為云FlexusDeepSeek征文&#xff5c; 基于Dify-LLM平臺應用實踐&#xff1a;創建智能知識庫問答助手 前言一、相關名詞介紹1.1 華為云Flexus X實例介紹1.2 華為云ModelArts Studio介紹 二、本次實踐介紹2.1 本次實踐環境介紹2.2 Dify平臺介紹 三、搭建Dify-LLM開發平臺3.1 進…

Spark on yarn的作業提交流程

一、YarnClient 二、YarnCluster 三、詳細描述 客戶端&#xff08;Client&#xff09;通過YARN的ResourceManager提交應用程序。在此過程中&#xff0c;客戶端進行權限驗證&#xff0c;生成Job ID和資源上傳路徑&#xff0c;并將這些信息返回給客戶端。客戶端將jar包、配置…

MySQL 主從復制與一主多從架構實戰詳解

文章目錄 一、MySQL 主從復制的本質原理 數據同步流程&#xff1a; 主從復制三大線程&#xff1a; 二、主從復制的三種模式 三、一主多從架構設計與應用 應用場景&#xff1a; 優勢&#xff1a; 四、單機模擬主從復制&#xff08;實戰配置&#xff09; 環境準備&#xff1a…