mysql索引都有哪些,有哪些分類

来源:https://www.cnblogs.com/code-live/archive/2023/03/20/17235686.html
-Advertisement-
Play Games

重要的話先說,今晚(3月20日)19:30 gt-checksum新版本發佈會,點擊下麵的鏈接預約: 會議詳情 (tencent.com) gt-checksum 1.2.0版本發佈後,受到了廣大社區用戶的熱烈響應。短短幾天,便有幾十個star,以及社區用戶提交了十幾條issue反饋問題,更有熱心用 ...


按數據結構分類可分為:B+tree索引、Hash索引、Full-text索引

按物理存儲分類可分為:聚簇索引、二級索引(輔助索引)

按欄位特性分類可分為:主鍵索引、普通索引、首碼索引

按欄位個數分類可分為:單列索引、聯合索引(複合索引、組合索引)

 

一、按數據結構分類


MySQL索引按數據結構分類可分為:B+tree索引、Hash索引、Full-text索引

 

- InnoDB MyISAM Memory
B+tree索引
Hash索引 × ×
Full-text索引 ✓(MySQL5.6+)
 
註:InnoDB實際上也支持Hash索引,但是InnoDB中Hash索引的創建由存儲引擎引擎自動優化創建,不能人為干預是否為表創建Hash索引

二、按物理存儲分類


 MySQL索引按葉子節點存儲的是否為完整表數據分為:聚簇索引、二級索引(輔助索引)。全表數據存儲在聚簇索引中,聚簇索引以外的其他索引叫做二級索引,也叫輔助索引。

 

1. 聚簇索引

聚簇索引的每個葉子節點存儲了一行完整的表數據,葉子節點間按id列遞增連接,可以方便地進行順序檢索。

InnoDB表要求必須有聚簇索引,預設在主鍵欄位上建立聚簇索引,在沒有主鍵欄位的情況下,表的第一個非空的唯一索引將被建立為聚簇索引,在前兩者都沒有的情況下,InnoDB將自動生成一個隱式的自增id列,併在此列上建立聚簇索引。

 

以MyISAM為存儲引擎的表不存在聚簇索引。

MyISAM表中的主鍵索引和非主鍵索引的結構是一樣的,索引的葉子節點不存儲表數據,存放的是表數據的地址。所以,MyISAM表可以沒有主鍵。

MyISAM表的數據和索引是分開存儲的。MyISAM表的主鍵索引和非主鍵索引的區別僅在於主鍵索引的B+tree上的key必須符合主鍵的限制,非主鍵索引B+tree上的key只要符合相應欄位的特性就可以了。

2. 二級索引

二級索引的葉子節點並不存儲一行完整的表數據,而是存儲了聚簇索引所在列的值。

 

回表查詢

由於二級索引的葉子節點不存儲完整的表數據,索引當通過二級索引查詢到聚簇索引列值後,還需要回到聚簇索引也就是表數據本身進一步獲取數據。

回表查詢 需要額外的 B+tree 搜索過程,必然增大查詢耗時。 

需要註意的是,通過二級索引查詢時,回表不是必須的過程,當SELECT的所有欄位在單個二級索引中都能夠找到時,就不需要回表,MySQL稱此時的二級索引為覆蓋索引或觸發了索引覆蓋

可以用Explain命令查看SQL語句的執行計劃,執行計劃的Extra欄位中若出現Using index,表示查詢觸發了索引覆蓋

 

三、按欄位特性分類


 

MySQL索引按欄位特性分類可分為:主鍵索引、唯一索引、普通索引、首碼索引

1. 主鍵索引

建立在主鍵上的索引被稱為主鍵索引,一張數據表只能有一個主鍵索引,索引列值不允許有空值,通常在創建表時一起創建。

2. 唯一索引

建立在UNIQUE欄位上的索引被稱為唯一索引,一張表可以有多個唯一索引,索引列值允許為空,列值中出現多個空值不會發生重覆衝突。

3. 普通索引

建立在普通欄位上的索引被稱為普通索引

4. 首碼索引

首碼索引是指對字元類型欄位的前幾個字元或對二進位類型欄位的前幾個bytes建立的索引,而不是在整個欄位上建索引。首碼索引可以建立在類型為char、varchar、binary、varbinary的列上,可以大大減少索引占用的存儲空間,也能提升索引的查詢效率。

四、按索引欄位個數分類


 

MySQL索引按欄位個數分類可分為:單列索引、聯合索引(複合索引、組合索引)

1. 單列索引

建立在單個列上的索引被稱為單列索引。

2. 聯合索引(複合索引、組合索引)

建立在多個列上的索引被稱為聯合索引,又叫複合索引、組合索引。

 

 

 


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

-Advertisement-
Play Games
更多相關文章
  • 實驗要求: 1、建立DNS伺服器,負責解析的域為openedu.com 2、要求將MX記錄指向mail.openedu.com,且對應A記錄為本機IP 3、要求將NS記錄指向ns1.openedu.com,且對應A記錄為本機IP 4、建立www的A記錄指向本機IP; 建立ftp對應A記錄為x.x.x ...
  • 硬體功耗測試 一、簡介 測試硬體的時候,避免不了功耗測試,功耗測試一般分為2種 第一個是被測硬體板子各個模組功耗情況 第二個是被測硬體整體功耗 為什麼要做功耗測試? 因為有些硬體產品是安裝電池的,一些低功耗產品比如感測器、車鑰匙等,安裝的都是紐扣電池,一節紐扣電池大概在600mAh左右,設備在安裝一 ...
  • 一:硬碟存儲 1、存儲類型 根據存儲的特性不同,可以將存儲分為記憶體和外存兩類。 記憶體:又叫做主存儲器,電腦中所有程式的運行都是在記憶體中進行。 外存:又叫做輔助存儲器,因為記憶體容量小且斷電會丟失所有數據。所以磁碟來實現數據的持久化存儲。例如:硬碟,U盤,軟盤,光碟 2、硬碟和磁碟: 磁碟是一個廣泛的 ...
  • linux伺服器預設通過22埠用ssh協議登錄,這種不安全。今天想做限制,即允許部分來源ip連接伺服器。 案例目標:通過iptables規則限制對linux伺服器的登錄。 處理方法:編寫為sh腳本,以便多次執行。iptables.sh : iptables -I INPUT -p tcp --dp ...
  • 一、單表查詢 庫表student.report,有3個欄位, 姓名、 學科、 成績, 記錄如下, 根據要求完成SQL語句 | Name | Subject | Result | | | | | | 李白 | Math | 95 | | 杜甫 | English | 83 | | 李商隱 | Math ...
  • 資料庫安裝方式:通用二進位安裝 策略1:直接拷貝資料庫文件 步驟1:主伺服器上停用資料庫 [root@node01 ~]# systemctl stop mysqld.service 步驟2:進入數據目錄,打包並壓縮數據文件 [root@node01 ~]# cd /usr/local/mysql/ ...
  • MySQL資料庫的安裝 (如果安裝失敗請看鏈接https://www.cnblogs.com/seeyouone/p/17236660.html) 註意: 必須用系統管理員身份運行mysql安裝程式。 安裝目錄切記不要用中文。 步驟一:雙擊mysql8的安裝嚮導 步驟二:安裝 (1)如果是首次安裝m ...
  • 步驟一:軟體的卸載準備 學習網路編程時,TCP/IP協議程式有伺服器端和客戶端。mysql這個資料庫管理軟體是使用TCP/IP協議。我們現在要卸載的是mysql的伺服器端,它沒有界面。 【計算】-->右鍵-->【管理】-->【服務】-->【mysql的服務】-->【停止】 步驟二:軟體的卸載 方式一 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...