MYSQL5.7 INDEXES之如何使用索引(一)

来源:https://www.cnblogs.com/semonshi/archive/2019/11/27/11941436.html
-Advertisement-
Play Games

Most MySQL indexes (PRIMARY KEY, UNIQUE, INDEX, and FULLTEXT) are stored in B-trees. Exceptions: Indexes on spatial data types use R-trees; MEMORY tab ...


Most MySQL indexes (PRIMARY KEYUNIQUEINDEX, and FULLTEXT) are stored in B-trees. Exceptions: Indexes on spatial data types use R-trees; MEMORY tables also support hash indexesInnoDB uses inverted lists for FULLTEXT indexes

B-Tree

A tree data structure that is popular for use in database indexes. The structure is kept sorted at all times, enabling fast lookup for exact matches (equals operator) and ranges (for example, greater than, less than, and BETWEEN operators). This type of index is available for most storage engines, such as InnoDB and MyISAM.

Because B-tree nodes can have many children, a B-tree is not the same as a binary tree, which is limited to 2 children per node.

Contrast with hash index, which is only available in the MEMORY storage engine. The MEMORY storage engine can also use B-tree indexes, and you should choose B-tree indexes for MEMORY tables if some queries use range operators.

B樹索引:可以在使用表達式中使用的對列的比較 =, >, >=, <, <=,或BETWEEN運營商。LIKE 如果to的參數LIKE是不以通配符開頭的常量字元串,則索引也可以用於比較.

哈希索引 :只能用來做相等比較,速度快。

MySQL使用索引進行以下操作:

  • WHERE快速 查找與子句匹配的行

  • 從考慮中消除行。如果可以在多個索引之間進行選擇,MySQL通常會使用找到最少行數的索引(最具 選擇性的索引)。

  • 如果表具有多列索引,則優化器可以使用索引的任何最左首碼來查找行。舉例來說,如果你有一個三列的索引 (col1, col2, col3),你有索引的搜索功能(col1), (col1, col2)以及(col1, col2, col3)有關更多信息,請參見 第8.3.5節“多列索引”

  • 執行聯接時從其他表中檢索行。如果聲明相同的類型和大小,MySQL可以更有效地在列上使用索引。在這種情況下, VARCHAR與 CHAR被認為是相同的,如果它們被聲明為相同的大小。例如, VARCHAR(10)和 CHAR(10)是相同的大小,但是 VARCHAR(10)和 CHAR(15)不是。

    對於非二進位字元串列之間的比較,兩個列應使用相同的字元集。例如,將一utf8列與一 latin1進行比較會排除使用索引。

    如果無法在不進行轉換的情況下直接比較值,則比較不同的列(例如,將字元串列與時間或數字列進行比較)可能會阻止使用索引。對於給定的值,如1在數值列,它可能比較等於在字元串列,例如任何數量的值 '1'' 1', '00001',或'01.e1'這排除了對字元串列使用任何索引的可能性。

  • 查找特定索引列MIN()或 MAX()key_col這由預處理器優化,該預處理器檢查您是否正在使用 索引中之前出現的所有關鍵部分在這種情況下,MySQL對每個表達式或 表達式進行一次鍵查找,並將其替換為常量。如果所有表達式都用常量替換,查詢將立即返回。例如: WHERE key_part_N =constantkey_colMIN()MAX()

    SELECT MIN(key_part2),MAX(key_part2)
      FROM tbl_name WHERE key_part1=10;
  • 如果排序或分組是在可用索引的最左首碼(例如上完成的,則對錶進行排序或分組 如果所有關鍵部分後面都有,則按相反順序讀取密鑰。請參見 第8.2.1.14節“按優化排序”和 第8.2.1.15節“按優化分組”。 ORDER BY key_part1key_part2DESC

  • 在某些情況下,可以優化查詢以檢索值而無需查詢數據行。(為查詢提供所有必要結果的索引稱為 覆蓋索引。)如果查詢僅從表中使用某些索引中包含的列,則可以從索引樹中檢索所選值,以提高速度:

    SELECT key_part3 FROM tbl_name
      WHERE key_part1=1

對於報表查詢處理大多數或所有行的小型表或大型表,索引的重要性不那麼重要。當查詢需要訪問大多數行時,順序讀取要比處理索引快。順序讀取可以最大程度地減少磁碟查找,即使查詢不需要所有行。有關詳細信息請參見第8.2.1.20節“避免全表掃描”

 

 


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

-Advertisement-
Play Games
更多相關文章
  • 問題描述:orcl伺服器要連接orclstd 想要sqlplus sys/410526@orclstd as sysdba 連接orclstd資料庫,但是發現啥意思密碼不對,就對sys密碼進行重新設置 1.在orcl伺服器上連接orclstd伺服器 [oracle@orcl orcl]$ sqlpl ...
  • 最近狀態很不好,一直暈暈暈暈暈暈乎乎的,一個測試實例,下班前修改了一下root的密碼,接著就下班走人,第二天來發現root密碼忘了 剛好自動化安裝腳本整理好了,本來想著算了直接重裝實例得了,簡單省事也花不了半分鐘,反正是測試實例,沒什麼大問題發現有些思維定勢,所以最近一直暗示自己要做一些一上來就排斥 ...
  • 創建資料庫 [root@localhost ~]# sqlite3 testDB.db ...
  • 場景:應用剛上線排除大批量請求的問題線上多次出現的Deadlock found when trying to get lock錯誤代碼:async batchUpdate(skus, { transaction }) { const result = await Promise.all(skus.m... ...
  • 方法 ...
  • [20191127]表 full Hash Value的計算.txt--//曾經做過表full Hash Value的計算,當時我是通過建立簡單的schema以及表名的形式,使用hashcat破解oracle的--//表 full Hash Value的計算,參考鏈接:http://blog.itp ...
  • 話不多說上sql: select to_char(1574837126879/(1000*60*60*24)+to_date('1970-01-01 08:00:00','YYYY-MM-DD HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS') from dual; ...
  • 使用kafka-server-stop.sh命令關閉kafka服務,發現無法刪除,報錯如下圖No kafka server to stop 下麵修改kafka-server-stop.sh將 PIDS=$(ps ax | grep -i 'kafka\.Kafka' | grep java | gr ...
一周排行
    -Advertisement-
    Play Games
  • 1. 說明 /* Performs operations on System.String instances that contain file or directory path information. These operations are performed in a cross-pla ...
  • 視頻地址:【WebApi+Vue3從0到1搭建《許可權管理系統》系列視頻:搭建JWT系統鑒權-嗶哩嗶哩】 https://b23.tv/R6cOcDO qq群:801913255 一、在appsettings.json中設置鑒權屬性 /*jwt鑒權*/ "JwtSetting": { "Issuer" ...
  • 引言 集成測試可在包含應用支持基礎結構(如資料庫、文件系統和網路)的級別上確保應用組件功能正常。 ASP.NET Core 通過將單元測試框架與測試 Web 主機和記憶體中測試伺服器結合使用來支持集成測試。 簡介 集成測試與單元測試相比,能夠在更廣泛的級別上評估應用的組件,確認多個組件一起工作以生成預 ...
  • 在.NET Emit編程中,我們探討了運算操作指令的重要性和應用。這些指令包括各種數學運算、位操作和比較操作,能夠在動態生成的代碼中實現對數據的處理和操作。通過這些指令,開發人員可以靈活地進行算術運算、邏輯運算和比較操作,從而實現各種複雜的演算法和邏輯......本篇之後,將進入第七部分:實戰項目 ...
  • 前言 多表頭表格是一個常見的業務需求,然而WPF中卻沒有預設實現這個功能,得益於WPF強大的控制項模板設計,我們可以通過修改控制項模板的方式自己實現它。 一、需求分析 下圖為一個典型的統計表格,統計1-12月的數據。 此時我們有一個需求,需要將月份按季度劃分,以便能夠直觀地看到季度統計數據,以下為該需求 ...
  • 如何將 ASP.NET Core MVC 項目的視圖分離到另一個項目 在當下這個年代 SPA 已是主流,人們早已忘記了 MVC 以及 Razor 的故事。但是在某些場景下 SSR 還是有意想不到效果。比如某些靜態頁面,比如追求首屏載入速度的時候。最近在項目中回歸傳統效果還是不錯。 有的時候我們希望將 ...
  • System.AggregateException: 發生一個或多個錯誤。 > Microsoft.WebTools.Shared.Exceptions.WebToolsException: 生成失敗。檢查輸出視窗瞭解更多詳細信息。 內部異常堆棧跟蹤的結尾 > (內部異常 #0) Microsoft ...
  • 引言 在上一章節我們實戰了在Asp.Net Core中的項目實戰,這一章節講解一下如何測試Asp.Net Core的中間件。 TestServer 還記得我們在集成測試中提供的TestServer嗎? TestServer 是由 Microsoft.AspNetCore.TestHost 包提供的。 ...
  • 在發現結果為真的WHEN子句時,CASE表達式的真假值判斷會終止,剩餘的WHEN子句會被忽略: CASE WHEN col_1 IN ('a', 'b') THEN '第一' WHEN col_1 IN ('a') THEN '第二' ELSE '其他' END 註意: 統一各分支返回的數據類型. ...
  • 在C#編程世界中,語法的精妙之處往往體現在那些看似微小卻極具影響力的符號與結構之中。其中,“_ =” 這一組合突然出現還真不知道什麼意思。本文將深入剖析“_ =” 的含義、工作原理及其在實際編程中的廣泛應用,揭示其作為C#語法奇兵的重要角色。 一、下劃線 _:神秘的棄元符號 下劃線 _ 在C#中並非 ...