mysql索引命中規則解說
首先我們來了解最左邊匹配原則,如下:
#1、先定位該sql的查詢條件,有哪些,那些是等值的,那些是範圍的條件。
2、等值的條件去命中索引最左邊的一個字段,然後依序從左往右命中,範圍的放在最後。
分析解說
1、mysql的索引分為叢集索引和非叢集索引,mysql的資料表是聚集索引組織表。
聚集規則是:有主鍵則定義主鍵索引為聚集索引;沒有主鍵則選取第一個不允許為NULL的唯一索引;尚未就使用innodb的內建rowid為聚集索引。
(免費學習影片教學推薦:mysql影片教學)
非聚集索引也稱為二級索引,或輔助索引。
2、mysql的索引無論是聚集索引或非聚集索引,都是B 樹結構。聚集索引的葉子節點存放的是數據,非聚集索引的葉節點存放的是非聚集索引的key和主鍵值。 B 樹的高度為索引的高度。
3、索引的高度
聚集索引的高度決定了根據主鍵取資料的理論IO次數。根據非聚集索引讀取資料的理論IO次數還要加上訪問聚集索引的IO次數總和。其實可能要不了這麼多IO。因為索引的分支節點所在的Page因為多次讀取會在mysql記憶體裡cache住。
mysql的一個block大小預設是16K,可以根據索引列的長度粗略估算索引的高度。
sql優化依據
SQL語句中的where條件,使用以上的提取規則,最終都會被提取到Index Key (First Key & Last Key),Index Filter與Table Filter之中。
Index First Key,只是用來定位索引的起始範圍,因此只在索引第一次Search Path(沿著索引B 樹的根節點一直遍歷,到索引正確的葉節點位置)時使用,一次判斷即可;
Index Last Key,用來定位索引的終止範圍,因此對於起始範圍之後讀到的每一條索引記錄,均需要判斷是否已經超過了Index Last Key的範圍,若超過,則當前查詢結束;
Index Filter,用於過濾索引查詢範圍中不滿足查詢條件的記錄,因此對於索引範圍中的每一筆記錄,均需要與Index Filter進行對比,若不滿足Index Filter則直接丟棄,繼續讀取索引下一條記錄;
Table Filter,這是最後一道where條件的防線,用於過濾通過前面索引的層層考驗的記錄,此時的記錄已滿足了Index First Key與Index Last Key構成的範圍,並且滿足Index Filter的條件,回表讀取了完整的記錄,判斷完整記錄是否滿足Table Filter中的查詢條件,同樣的,若不滿足,跳過目前記錄,繼續讀取索引的下一筆記錄,若滿足,則傳回記錄,此記錄滿足了where的所有條件,可以傳回給前端使用者
##分析
一條sql語句要執行完成需要經歷什麼樣的過程? 當一條sql語句提交給mysql資料庫進行查詢的時候需要經歷以下幾步:#1、先在where解析這一步把目前的查詢語句中的查詢條件分解成每一個獨立的條件單元;2、mysql會自動將sql拆分重組;3、然後where條件會在B-tree index這部分進行索引匹配,如果命中索引,就會定位到指定的table records位置。如果沒有命中,則只能採用全部掃描的方式;4、根據目前查詢欄位傳回對應的資料值。 如下圖:以上是mysql索引命中規則解說的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

MySQL適合初學者使用,因為它安裝簡單、功能強大且易於管理數據。 1.安裝和配置簡單,適用於多種操作系統。 2.支持基本操作如創建數據庫和表、插入、查詢、更新和刪除數據。 3.提供高級功能如JOIN操作和子查詢。 4.可以通過索引、查詢優化和分錶分區來提升性能。 5.支持備份、恢復和安全措施,確保數據的安全和一致性。

Navicat本身不存儲數據庫密碼,只能找回加密後的密碼。解決辦法:1. 檢查密碼管理器;2. 檢查Navicat的“記住密碼”功能;3. 重置數據庫密碼;4. 聯繫數據庫管理員。

使用 Navicat Premium 創建數據庫:連接到數據庫服務器並輸入連接參數。右鍵單擊服務器並選擇“創建數據庫”。輸入新數據庫的名稱和指定字符集和排序規則。連接到新數據庫並在“對象瀏覽器”中創建表。右鍵單擊表並選擇“插入數據”來插入數據。

MySQL是一個開源的關係型數據庫管理系統。 1)創建數據庫和表:使用CREATEDATABASE和CREATETABLE命令。 2)基本操作:INSERT、UPDATE、DELETE和SELECT。 3)高級操作:JOIN、子查詢和事務處理。 4)調試技巧:檢查語法、數據類型和權限。 5)優化建議:使用索引、避免SELECT*和使用事務。

MySQL和SQL是開發者必備技能。 1.MySQL是開源的關係型數據庫管理系統,SQL是用於管理和操作數據庫的標準語言。 2.MySQL通過高效的數據存儲和檢索功能支持多種存儲引擎,SQL通過簡單語句完成複雜數據操作。 3.使用示例包括基本查詢和高級查詢,如按條件過濾和排序。 4.常見錯誤包括語法錯誤和性能問題,可通過檢查SQL語句和使用EXPLAIN命令優化。 5.性能優化技巧包括使用索引、避免全表掃描、優化JOIN操作和提升代碼可讀性。

Navicat for MariaDB 無法直接查看數據庫密碼,因為密碼以加密形式存儲。為確保數據庫安全,有三個方法可重置密碼:通過 Navicat 重置密碼,設置複雜密碼。查看配置文件(不推薦,風險高)。使用系統命令行工具(不推薦,需要對命令行工具精通)。

可在 Navicat 中通過以下步驟新建 MySQL 連接:打開應用程序並選擇“新建連接”(Ctrl N)。選擇“MySQL”作為連接類型。輸入主機名/IP 地址、端口、用戶名和密碼。 (可選)配置高級選項。保存連接並輸入連接名稱。

可以通過以下步驟打開 phpMyAdmin:1. 登錄網站控制面板;2. 找到並點擊 phpMyAdmin 圖標;3. 輸入 MySQL 憑據;4. 點擊 "登錄"。
