mysql索引引擎_mysql搜索引擎和索引那些事

mysql的存儲引擎

三種存儲方式

**InnoDB **(默認)

一個文件存儲表結構,一個存儲數據和目錄(索引)

# 一個文件 book_name | author| press | price | pub_date frm文件 frame的縮寫

# 另一個文件(數據+ 目錄)

# | 倚天屠龍記 | egon | 北京工業地雷出版社 | 70.00 | 2019-07-01 |

# | 九陽神功 | alex | 人民音樂不好聽出版社 | 5.00 | 2018-07-04 |

# | 降龍十巴掌 | egon | 知識產權沒有用出版社 | 20.00 | 2019-07-05 |

# | 葵花寶典 | yuan | 知識產權沒有用出版社 | 33.00 | 2019-08-02 |

# | 彭于晏的枕邊故事 | 彭于晏 | py26期出版社 | 80.00 | 2020-10-30 |

memory

一個文件存儲數據結構,數據存儲在內存(差的快,早期都是這種存儲方式,現在有redis了)

MyIsam

一個文件表結構,一個存儲數據,還有一個放目錄(索引)

# 一個文件 book_name | author| press | price | pub_date frm文件 frame的縮寫

# 另一個文件(數據)

# 另一個文件(目錄)

數據庫中數據的存儲方式

實際的數據庫中數據的存儲方式

平衡樹 balance tree b-tree

b+樹 :能夠更好的降低樹的高度,并且對范圍查詢比較友好

myisam/innodb存儲引擎 : 索引結構都是通過b+樹實現的

每一個字段都可以創建索引

對于一個字段創建的索引在當前字段作為條件的時候可以起到加速作用

索引分兩類 :

# 聚集索引(聚簇索引) :數據和索引存在一顆樹上

# 輔助索引(非聚集索引/非聚簇索引) :數據和索引不存在一顆樹上

你必須要在innodb中的所有表都要主動創建主鍵,主鍵就是最好的索引

myisam和innodb在索引上的不同

# myisam中所有的索引都是輔助索引

# innodb中主鍵是聚集索引,其他都是輔助索引

平衡樹

用到平衡樹的算法,會算取中間范圍,讓樹不會成為歪脖樹。所以每次添加索引需要時間長點,他在構造以索引為主的平衡樹

552971c3804558efeac5de8942e12cbc.png

B+樹

B+樹就是平衡樹的升級版,將各個節點也可以鏈式連接起來,這樣查找的時候,(20 between 70)就不用回到起點從新查找。就可以縱向查找了

a8c87dd083f2d7b0d0bc94202b03cc1c.png

索引

索引的優點 : 加速查詢效率

索引的缺點 : 拖慢寫的速度,占用更多的硬盤(解決辦法分布式讀寫分離)

# create index 索引名 on 表名(字段名);

# create index ind_id on s1(id);

# drop index 索引名 on 表名;

# drop index ind_id on s1;

# 查看

# show create table s1;

正確的使用索引

這里說一下,mysql只能命中一個索引,當你創建多個索引的時候,他在執行語句時,會先走分析器,分析使用什么索引最快,就是平衡樹結構更健康。如果你想看mysql分析結果。在查詢語句前加上explain

# 1.對哪個字段創建了索引,條件就使用那個字段

# 2.條件列不能參與計算,不能調用函數

# 3.如果列中重復值多,那么不適合創建索引(性別)(1/10)

# 4.盡量不使用范圍查詢,范圍越小效率越高

# 5.使用like 'a%'

# 6.and 相連的多個條件 如果有一個索引都可以被命中

# 7.or 相連的多個條件 必須都有索引才能命中

# 8.聯合索引和最左前綴原則(不能使用范圍,從使用了范圍的那個字段之后的所有條件都無法命中索引,條件之間只能用and不能用or)

# create index mix_ind on s1(id,email,name);

# 可以命中索引

# select * from s1 where id = 2000000 and email='eva2000000@oldboy' and name='eva';

# select * from s1 where id = 2000000 and name='eva';

# select * from s1 where id = 2000000 and email='eva2000000@oldboy';

# select * from s1 where id = 2000000;

# 2000000 eva jingliyang@xxx

# 不能命中索引

# select * from s1 where email='eva2000000@oldboy';

# select * from s1 where name='eva';

# select * from s1 where id = 1000000 and email like 'eva2000000@oldboy';

聯合索引就是用多個字段當索引,以主鍵為第一個(id)開始分大小,id分完按照下一個email開始分,進行排序,形成樹

5b42c41ab310229a5a64cd34bda6bc3b.png

索引合并

意思是:創建的時候是2個單獨的索引,但是在使用的時候臨時合并成一個。

以下是查看mysql分析查看的結果,Mysql把2個獨立的索引合并成了一個使用,為了更快捷的查看以下圖片中的語句。

028fa122ff1800a16950a1647ad663b4.png

索引覆蓋

'Using Index'的意思是“覆蓋索引”,它是使上面sql性能提升的關鍵

一個包含查詢所需字段的索引稱為“覆蓋索引”

MySQL只需要通過索引就可以返回查詢所需要的數據,而不必在查到索引之后進行回表操作,減少IO,提高了效率

以下例子

aa1b7f3025878fc1557e771438a5f1a2.png

上圖,首先我們要知道。innodb中主鍵是聚集索引,其他都是輔助索引

加入上表不是以id為主鍵的表,所以id是輔助索引,當你查詢的時候,需要通過id找到主鍵,在從聚集索引中查找在輔助索引中找到的主鍵,此時需要回表。

而我查詢的只是索引。不需要回表,因為已經查到了。這就是索引覆蓋

MySQL只需要通過索引就可以返回查詢所需要的數據,而不必在查到索引之后進行回表操作,減少IO,提高了效率

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

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

相關文章

SPOJ HIGH Highways ——Matrix-Tree定理 高斯消元

【題目分析】 Matrix-Tree定理高斯消元 求矩陣行列式的值&#xff0c;就可以得到生成樹的個數。 至于證明&#xff0c;可以去看Vflea King&#xff08;炸樹狂魔&#xff09;的博客 【代碼】 #include <cmath> #include <cstdio> #include <cstring> #include…

深度ip轉換器手機版app_房串串經紀人版app下載-房串串經紀人版app手機版 v1.0.0...

房串串經紀人版app&#xff1a;專門為房產經紀人打造的輔助辦公軟件&#xff0c;提供的功能非常的全面&#xff0c;涵蓋了房產服務過程中的各個環節&#xff0c;隨時可以手機在線處理自己的日常工作&#xff0c;提高了工作的效率&#xff0c;操作很簡單&#xff0c;讓你更好的實…

netduino之電源參考電路MC33269DT-5.0G

手里有塊netduino的板子&#xff0c;一直閑置未用&#xff0c;netduino具體是什么不知道的就百度吧&#xff0c;我這也不是主要講netduino開發的&#xff0c;簡單說就是用.net開發硬件&#xff0c;了解到netduino也是原來學過C#&#xff0c;當然我主要的工作還是嵌入式硬件開發…

漢王考勤 連接mysql_漢王考勤管理軟件打開時出現:連接數據錯誤,請確認數據庫服務器信息是否有誤。這樣該怎樣解決?...

漢王指紋考勤系統故障答疑1. 考勤鐘上的指紋記錄丟失了。答&#xff1a;沒有可能自己丟失&#xff0c;只可能是誤刪除了指紋信息&#xff0c;只能重新登錄指紋。2. 在預處理時時間過長。答&#xff1a;由于用戶單位的人員多&#xff0c;軟件設置的班次亂等因素造成&#xff1b;…

PowerShell使用教程

一、說明 1.1 背景說明 個人對PowerShell也不是很熟悉&#xff0c;開始的時候就突然看到開始菜單中多了個叫PowerShell的文件夾&#xff0c;后來一點就看到某個教程視頻說PowerShell很厲害但也沒怎么聽&#xff0c;再后來就看到kali也有了一些PowerShell的腳本這才意識到PowerS…

python Gunicorn

1. 簡介 Gunicorn(Green Unicorn)是給Unix用的WSGI HTTP 服務器&#xff0c;它與不同的web框架是非常兼容的、易安裝、輕、速度快。 2. 示例代碼1 def app(environ, start_response):data b"Hello World\n"start_response("200 OK", [("Content-Type…

如何使處于不同局域網的計算機實現遠程通信_小區自來水二次加壓泵站遠程監控系統方案...

一、小區自來水二次加壓泵站遠程監控系統方案項目概述隨著城市高效快速地發展&#xff0c;市區規模越來越大&#xff0c;小區二次加壓泵房將繼續增加&#xff0c;供水公司二次加壓泵房管理工作將更加繁重。目前小區二次加壓供水方式主要有兩種&#xff0c;一種是不銹鋼水箱不銹…

Java中的Enum的使用與分析

示例&#xff1a; public enum EnumTest {FRANK("The given name of me"),LIU("The family name of me");private String context;private String getContext(){return this.context;}private EnumTest(String context){this.context context;}public sta…

postgresql返回行數_怎么優化你的SQL查詢?以PostgreSQL為例

實際工作中&#xff0c;我們每個人難免都會要寫SQL&#xff0c;執行SQL&#xff0c;但是有時時候執行非常慢&#xff0c;甚至獲得不了結果。這時候你會怎么辦&#xff1f;放棄&#xff1f;去苦口婆心的求隔壁房間胡子擦擦的猥瑣DBA大叔&#xff1f;NO&#xff0c;正確方法是先檢…

首次構建android studio gradle 下載緩慢的問題

1、先使用其他工具下載gradle&#xff0c; https\://services.gradle.org/distributions/gradle-2.14.1-all.zip 2、然后放在C:\Users\Administrator\.gradle\wrapper\dists\gradle-2.14.1-all\8bnwg5hd3w55iofp58khbp6yv 目錄中 隨機碼文件夾可以通過先嘗試構建&#xff0c;讓…

288. Unique Word Abbreviation

題目&#xff1a; An abbreviation of a word follows the form <first letter><number><last letter>. Below are some examples of word abbreviations: a) it --> it (no abbreviation)1 b) d|o|g --> d…

jqgrid mysql 分頁_jQgrid 分頁顯示

當使用jqgrid去顯示數據的時候&#xff0c;如果數據太多&#xff0c;那么jqgrid就會繪制的很慢&#xff0c;這樣很影響用戶的體驗&#xff0c;十分影響用戶的心情&#xff0c;所以我們采用分頁的方式去取數據&#xff0c;這樣就能避免用戶長時間的等待&#xff0c;從而提升用戶…

echarts 詞云_python Flask+爬蟲制作股票查詢、歷史數據、股評詞云網頁

自學python的數據分析&#xff0c;爬蟲后&#xff0c;花了幾天時間看視頻學習Flask做了一個簡單的股票查詢網頁。本來還想著加入一些其他功能&#xff0c;比如財務指標分析&#xff0c;輿情分析&#xff0c;最完美的想法是做成一個股票評分系統&#xff0c;輸入股票代碼可以自動…

JavaSE基礎知識(6)—異常和異常處理

一、異常的理解及體系結構圖 1、理解 異常&#xff1a;程序運行過程中發生的不正常現象。java中的錯誤&#xff1a;   語法錯誤   運行異常   邏輯錯誤 2、體系圖 java程序在執行過程中所發生的異常分為兩類&#xff1a; Error&#xff1a;Java虛擬機無法解決的嚴重問題。…

peripheralStateNotificationCB

1 /*********************************************************************2 * fn peripheralStateNotificationCB 外圍設備 狀態 通知 回調函數3 *4 * brief Notification from the profile of a state change. 通知來自于profile的狀態改變&#xff01;5 *6 * …

mysql dump 1017_MySQL數據庫導出 - Can't Wait Any Longer - OSCHINA - 中文開源技術交流社區...

本文內容主要來自MySQL官方文檔&#xff1a;“MySQL5.1 Reference&#xff0c;2.10.3. 將MySQL數據庫拷貝到另一臺機器”注意&#xff1a;參數名與值間可以不用空格&#xff0c;如-uroot或-u root均可&#xff1b;某些參數會有不同含義1.數據庫導出(-A導出所有數據庫&#xff0…

Jsp2.0自定義標簽(第二天)——自定義循環標簽

今天是學習自定義標簽的第二天&#xff0c;主要是寫一個自定義的循環標簽。 先看效果圖&#xff1a; 前臺頁面Jsp代碼 <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%> <%taglib prefix"myout…

正則表達式以什么開頭以什么結尾_股票hk是什么意思,股票st開頭是什么意思,新通聯股票...

股票hk是什么意思,股票st開頭是什么意思,新通聯股票股票hk是什么意思,股票st開頭是什么意思,新通聯股票我們首先解決時間跨度問題&#xff1a;如果您為諸如退休之類的遙遠目標投資&#xff0c;則應主要投資股票(同樣&#xff0c;我們建議您通過共同基金投資)。心理控制第一&…

讀書筆記--SQL必知必會03--排序檢索數據

3.1 排序數據 子句&#xff08;clause&#xff09; SQL語句由子句構成。一個子句通常由一個關鍵字加上所提供的數據組成。 ORDER BY子句可以取一個或多個列的名字&#xff0c;將SELECT語句檢索出的數據進行排序。 ORDER BY子句可以使用非檢索的列排序數據。 ORDER BY子句必須作…

mysql中編寫匿名塊_Oracle數據庫之Oracle_PL/SQL(1) 匿名塊

本文主要向大家介紹了Oracle數據庫之Oracle_PL/SQL(1) 匿名塊&#xff0c;通過具體的內容向大家展現&#xff0c;希望對大家學習Oracle數據庫有所幫助。1. PL/SQL 簡介PL/SQL是一種比較復雜的程序設計語言, 用于從各種環境中訪問Oracle數據庫。為什么使用PL/SQL&#xff1f;Ora…