MySQL 中 MyISAM 中的查詢為什麼比 InnoDB 快?
點選上方“業餘草”,選擇“置頂公眾號”
第一時間獲取技術乾貨和業界資訊!
哎呀,一年之計在於春啊。最近過完年了,微信群裡有非常多的小夥伴在問我一下面試方面的問題。比如:有讓我出題的,有讓我推薦資料的,還有讓我推薦公司的。。。
真是太難為我了!也有些人剛開過年,任務不算多。所以,經常醬油,不知道該學習什麼?
於是,我發了一套面試題,如下:
結果,他們都來要答案了。哎,做伸手黨可不好,什麼時候才能獨立呢?所以,我一一的拒絕了他們。
關於這套面試題,有很多內容,我都寫過文章的!今天,我們來寫一寫第 14 小題。為什麼 MyisAM 查詢快?
關於,這個問題,我網上看了很多答案。大多內容都雷同,但是我要強調的是,並不是說 MYISAM 一定比 InnoDB 的 select 快。
其實呢?MyISAM 適合讀多,併發少的場景;這個問題要分場景來看。不同的場景,還真不能說 MyISAM 比 InnoDB 中的查詢快!
下面我們一起來看看 Innodb 和 Myisam 的 5 大區別:
上面的“事務”寫錯了。不過,我相信大家能看明白其中的解釋。
關於“行鎖”還是“表鎖”,可以看我的這篇文章《InnoDB 的 select 行鎖還是表鎖》。
關於 count 的區別,可以看我的這篇文章《你真的懂 select count(*) 嗎?》。
那麼為什麼大家喜歡說 MyisAM 查詢快呢?那是因為,InnoDB 的表是根據主鍵進行展開的 B+tree 的聚集索引。MyIsam 則非聚集型索引,myisam 儲存會有兩個檔案,一個是索引檔案,另外一個是資料檔案,其中索引檔案中的索引指向資料檔案中的表資料。
聚集型索引並不是一種單獨的索引型別,而是一種儲存方式,InnoDB 聚集型索引實際上是在同一結構中儲存了 B+tree 索引和資料行。當有聚簇索引時,它的索引實際放在葉子頁中。
結合上圖,可以看出:INNODB 在做 SELECT 的時候,要維護的東西比 MYISAM 引擎多很多。
InnoDB:通過為每一行記錄新增兩個額外的隱藏的值來實現 MVCC,這兩個值一個記錄這行資料何時被建立,另外一個記錄這行資料何時過期(或者被刪除)。但是 InnoDB 並不儲存這些事件發生時的實際時間,相反它只儲存這些事件發生時的系統版本號。這是一個隨著事務的建立而不斷增長的數字。每個事務在事務開始時會記錄它自己的系統版本號。每個查詢必須去檢查每行資料的版本號與事務的版本號是否相同。讓我們來看看當隔離級別是 REPEATABLEREAD 時這種策略是如何應用到特定的操作的:
SELECT InnoDB 必須每行資料來保證它符合兩個條件:
說白了,為什麼現在一些人喜歡 NoSQL 呢?因為 nosql 本身似乎應該是以省去解析和事務鎖的方式來提升效能。MYISAM 不支援事務,也是它查詢快的一個原因!
原文連結:MySQL 中 MyISAM 中的查詢為什麼比 InnoDB 快?
10T技術資源大放送!包括但不限於:C/C++,Linux,Python,Java,PHP,人工智慧,GO等等。在公眾號內回覆對應關鍵字或框架名字,即可免費獲取!!
你再主動一點點 我們就有故事了
相關文章
- MySQL中MyISAM為什麼比InnoDB查詢快MySql
- MySQL中myisam和innodb有什麼差異?MySql
- MySQL中MyISAM引擎與InnoDB引擎效能比較MySql
- Mysql 中 MyISAM 和 InnoDB 的區別MySql
- 在Python中,為什麼從dict查詢元素比list快?(待填坑)Python
- MYSQL INNODB中hash查詢表的實現MySql
- mysql的innodb和myisam的dml效能對比MySql
- Mysql中myisam和innodb的區別,至少5點MySql
- Mysql引擎中MyISAM和InnoDB的區別有哪些?MySql
- 告訴你MySQL主鍵查詢為什麼這麼快MySql
- MySQL的MyISAM和InnoDB引擎的主要區別是什麼?MySql
- ClickHouse為什麼查詢速度快?
- 為什麼SELECT查詢中應避免使用*?
- 資料庫系列:MySQL引擎MyISAM和InnoDB的比較資料庫MySql
- MySQL: InnoDB 還是 MyISAM?MySql
- 關於innodb中查詢的定位方法
- 圖解|12張圖解釋MySQL主鍵查詢為什麼這麼快圖解MySql
- MySQL什麼是InnoDB檢查點?MySql
- 圖解|12張圖告訴你MySQL的主鍵查詢為什麼這麼快圖解MySql
- [破解]為什麼hibernate插入快,查詢慢
- MySQL三種InnoDB、MyISAM和MEMORY儲存引擎對比MySql儲存引擎
- MySQL中跨庫查詢怎麼搞?MySql
- Mysql更換MyISAM儲存引擎為Innodb的操作記錄MySql儲存引擎
- MySQL資料庫MyISAM儲存引擎轉為Innodb的方法MySql資料庫儲存引擎
- MySQL5.1 MyISAM與InnoDB 引擎讀寫效能對比薦MySql
- MySQL 5.7 查詢InnoDB鎖表MySql
- MySQL的索引為什麼用B+Tree?InnoDB的資料儲存檔案和MyISAM的有何不同?MySql索引
- 為什麼 call 比 apply 快?APP
- MySQL引擎介紹ISAM,MyISAM,HEAP,InnoDBMySql
- [MySQLFAQ]系列—從MyISAM轉到InnoDB需要注意什麼MySql
- mysql中的多表關聯查詢MySql
- 探究MySQL中SQL查詢的成本MySql
- MySQL儲存引擎:MyISAM和InnoDB的區別MySql儲存引擎
- MySQL儲存引擎MyISAM與InnoDB的優劣MySql儲存引擎
- WebAssembly 為什麼比 asm.js 快?WebASMJS
- mysql為什麼加索引就能快MySql索引
- 快遞物流查詢API有什麼作用?API
- Mysql中的鎖機制——MyISAM表鎖MySql