mysql索引 b+樹

来源:https://www.cnblogs.com/ccxka/archive/2018/09/04/9583893.html
-Advertisement-
Play Games

1、B+樹基本概念 B+樹的語言定義比較複雜,簡單的說是為磁碟存取設計的平衡二叉樹 網上經典圖,黃色p1 p2 p3代表指針,藍色的代表磁碟,裡面包含數據項,第一層17,35,p1就代表小於17的,p2就代表17-35之間的,p3就代表大於35的,可是需要註意的是,第三層才是真實的數據,17、35都 ...


1、B+樹基本概念

  B+樹的語言定義比較複雜,簡單的說是為磁碟存取設計的平衡二叉樹

  網上經典圖,黃色p1 p2 p3代表指針,藍色的代表磁碟,裡面包含數據項,第一層17,35,p1就代表小於17的,p2就代表17-35之間的,p3就代表大於35的,可是需要註意的是,第三層才是真實的數據,17、35都不是真實數據,只是用來劃分數據的!

2、為什麼使用B+樹

  B+樹有什麼好處我們非要使用它呢?那就先要來看看mysql的索引

 

  2.1mysql索引

    試想一下在mysql中有200萬條數據,在沒有建立索引的情況下,會全部進行掃描讀取,這個時間消耗是非常恐怖的,而對於大型一點的網站來說,達到這個數據量很容易,不可能這樣去設計

    在我們創建資料庫表的時候,大家都知道一個東西叫做主鍵,一般來講資料庫會自動在主鍵上創建索引,這叫做主鍵索引,來看看索引的分類吧

    a.主鍵索引:int優於varchar

    b.普通索引(INDEX):最基本的索引,沒有限制,加速查找

    c.唯一索引(UNUQUE):聽名字就知道,要求所有類的值是唯一的,但是允許有空值

    d.組合索引:

1 CREATE INDEX name_age_address_Index ON `student`(`name`, `age`, `address`);

    在這裡實際上包含三個索引,說到組合索引,一定要講最左首碼原則

 


    最左首碼原則:

      我們現在創建了索引x,y,z,Index:(x,y,z),只會走x,xy,xyz的查詢,例如:

1 select * from table where x='1'
2 select * from table where x='1' and b='1'
3 select * from table where x='1' and b='1' and c='1'

      如果是x,z,就只會走x,註意一種特殊情況,select * from table where x='1' and y>'1' and z='1',這裡只會走xy,因為在經歷xy的篩選後,z不能保證是有序的,可索引是有序的,因此不會走z


 

    e.全文索引(FULLTEXT):用於搜索內容很長的文章之類的很好用,如果創建普通的索引,在遇到 like='%xxx%'這種情況索引會失效

1 ALTER TABLE tablename ADD FULLTEXT(col1, col2)
2 SLECT * FROM tablename WHERE MATCH(col1, col2) AGAINST(‘x′, ‘y′, ‘z′)

    這樣就可以將col1和col2裡面包含x,y,z的記錄全部取出來了

    

    索引的刪除:DORP INDEX IndexName ON `TableName`

  

    索引的優缺點:

      1、在數據量特別龐大的時候,建立索引有助於我們提高查詢效率

      2、在操作表的時候,維護索引會增加額外開銷

      3、不泛濫使用索引,創建多了索引文件會膨脹很快

 

  2.2B+樹的優點

    瞭解上面的模型後,試想一下,200W條數據,假如沒有建立索引,會全部進行掃描,B+樹僅僅用三層結構可以表示上百萬的數據,只需要三次I/O!這提升是真的巨大啊!

    因為B+樹是平衡二叉樹,在不斷的增加數據的時候,為了保持平衡可能需要做大量的拆分操作,因此提供了旋轉的功能,不知道旋轉建議去補一下樹的基礎知識

    B+樹插入動畫(來自https://www.cnblogs.com/vincently/p/4526560.html)

3、索引優化

  1、最佳左首碼原則

  2、不要在索引的列上做操作

  3、like會使索引失效變成全表掃描

  4、字元串不加單引號會導致索引失敗

  5、減少使用select *

  參照這裡,寫的很好   https://www.cnblogs.com/zhaobingqing/p/7071331.html

 

總結:

  sql語句怎麼用,沒有規定必須怎麼查,對於數據量小,有時候不需要新建立索引,根據一定的實際情況來考慮

    

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 我們先介紹一下 MongoDB 的聚合功能,聚合操作主要用於對數據的批量處理,往往將記錄按條件分組以後,然後再進行一系列操作,例如,求最大值、最小值、平均值,求和等操作。聚合操作還能夠對記錄進行複雜的操作,主要用於數理統計和數據挖掘。在 MongoDB 中,聚合操作的輸入是集合中的文檔,輸出可以是一 ...
  • 一.概述 mysqlshow客戶端查找工具,能很快地查找存在哪些資料庫,資料庫中的表,表中的列或索引,和mysql客戶端工具很類似,不過有些特性是mysql客戶端工具所不具備的。 mysqlshow的使用方法如下: 如果不加任何選項,預設情況下,會顯示所有資料庫,下麵將顯示當前mysql中所有資料庫 ...
  • CHECK約束添加規則 1、CHECK 約束用於限制列中的值的範圍。 2、Check約束通過邏輯表達式來判斷數據的有效性,用來限制輸入一列或多列的值的範圍,在列中更新數據時,所要輸入的內容必須滿足Check約束的條件,否則將無法正確輸入。 3、如果對單個列定義 CHECK 約束,那麼該列只允許特定的 ...
  • 什麼是Hadoop HDFS? Hadoop 分散式文件系統是世界上最可靠的文件系統。HDFS可以再大量硬體組成的集群中存儲大文件。 它的設計原則是趨向於存儲少量的大文件,而不是存儲大量的小文件。 即使在硬體發生故障的時候,HDFS也能體現出它對數據存儲的可靠性。它支持高吞吐量的平行訪問方式。 HD ...
  • 資料庫也是電腦類筆試面試中不可避免會遇到的考點,尤其是銀行和部分傳統軟體類公司。這裡根據整理的資料,對資料庫的相關知識也做個總結吧。希望學過資料庫但長時間不用的同學根據這些知識能夠回憶和重拾,沒學過的同學能掌握一些資料庫的基礎知識。 第一節 資料庫也是電腦類筆試面試中不可避免會遇到的考點,尤其是 ...
  • 在還原SQL Server 2005資料庫文件之前,建議先把要還原的資料庫文件複製粘貼到某個盤的根目錄下,這樣便於一會兒找到相關的文件,比如C盤。 先打開SQL Server 2005的Microsoft SQL Server Management Studio並登錄進去,如圖所示: ① 創建資料庫 ...
  • mysql中 對於查詢結果只顯示n條連續行的問題 在領扣上碰到的一個題目:求滿足條件的連續3行結果的顯示 X city built a new stadium, each day many people visit it and the stats are saved as these column ...
  • 有一個網友問及,在SQL中,計算每一筆的結餘數。他提供的截圖說明: 實現這個功能,關鍵是獲取前一筆記錄eqty欄位的值。 下麵Insus.NET嘗試寫一下。使用最簡單的方法,就是迴圈每一筆記錄。然後可以計算 qty加上前一筆的eqty。 創建一個臨時表存儲原數: CREATE TABLE #tt ( ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...