日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MySql------存储引擎(InnoDB,ISAM)

發布時間:2023/12/14 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySql------存储引擎(InnoDB,ISAM) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MySql存儲引擎

  • 導讀
  • InnoDB存儲引擎
    • 一、存儲結構
    • 二、存儲空間消耗
    • 三、對事務支持情況
    • 四、對鎖支持
    • 五、表行數
  • MyISAM存儲引擎
    • 一、存儲結構
    • 二、存儲空間消耗
    • 三、對事務支持情況
    • 四、對鎖支持
    • 五、表行數
  • 為什么MyISAM會比Innodb 的查詢速度快
    • 應用場景選擇

導讀

MySQL支持的存儲引擎很多,其中包括MyISAM、InnoDB、MERGE、EXAMPLE、BDB、ARCHIVE、MEMORY、NDB Cluster等,其中InnoDB和BDB支持事務安全。同時MySql還支持一些第三方的存儲引擎,例如TokuDB(高寫性能高壓縮存儲引擎)、Infobright(列式存儲引擎)。本文主要講InnoDB和MyISAM這兩個普遍使用的存儲引擎之間差異,選擇場景。

InnoDB存儲引擎

InnoDB是MySQL最常用的數據庫引擎,是MySQL AB發布binary的標準之一。InnoDB存儲引擎由Innobase Oy公司所開發,在2006年五月時被甲骨文公司并購。與傳統的ISAM與MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事務(Transaction)功能,類似于PostgreSQL。

一、存儲結構

所有的表都保存在同一個數據文件中(也可能是多個文件,或者是獨立的表空間文件),.frm文件同樣存儲為表結構文件,.ibd文件存儲的是數據和索引文件,InnoDB表的大小只受限于操作系統文件的大小,一般為2GB。
InnoDB支持聚簇索引和非聚簇索引

二、存儲空間消耗

InnoDB會在主內存中建立其專用的緩沖池用于高速緩沖數據和索引。InnoDB表的大小只受限于操作系統文件的大小,一般為2GB。

三、對事務支持情況

擁有外鍵和事務支持,還具有事務提交(commit)、回滾(rollback)和崩潰修復能力(crach recovery capabilities)等這些事務安全(transaction-safe ACID compliant)型表。
InnoDB中必須包含主鍵索引。引擎的自動增長列必須是索引,如果是組合索引也必須是組合索引的第一列。

四、對鎖支持

InnoDB存儲引擎支持表鎖,行鎖,行鎖可以大幅度提高用戶并發操作。對于 InnoDB 引擎來說,讀鎖和寫鎖可以加在表上,也可以加在行上。
對于并發讀和并發寫的問題,可以通過實現一個由兩種類型的鎖組成的鎖系統來解決。這兩種類型的鎖通常被稱為 共享鎖(Shared Lock,S Lock) 和 排他鎖(Exclusive Lock,X Lock),也叫 讀鎖(readlock) 和 寫鎖(write lock):

共享鎖 / 讀鎖:允許事務讀(select)數據
排他鎖 / 寫鎖:允許事務刪除(delete)或更新(update)數據

InnoDB 存儲引擎的行級鎖是基于索引的,也就是說當索引失效或者說根本沒有用索引的時候,行鎖就會升級成表鎖。

五、表行數

沒有保存表的總行數,如果使用select count(*) from table;就會遍歷整個表,消耗相當大,但是在加了wehre條件后,myisam和innodb處理的方式都一樣。

MyISAM存儲引擎

MyISAM是MySQL(5.5版之前)的默認數據庫引擎,由早期的ISAM(Indexed Sequential Access Method:有索引的順序訪問方法)改良。雖然查詢性能優良,但有個缺點:不支持事務(transaction)。所以最近幾年逐漸引入了InnoDB(另一種數據庫引擎),后來就逐漸取代MyISAM。

一、存儲結構

每個MyISAM在磁盤上存儲成三個文件,它們以表的名字開頭來命名。.frm文件存儲表定義。.MYD(MYD)存儲數據文件。.MYI(MYIndex)存儲索引文件。
MyISAM只支持非聚簇索引

二、存儲空間消耗

MyISAM存儲空間是可被壓縮,存儲空間占用較小。MyISAM支持三種存儲格式:靜態表(默認,但是注意數據末尾不能有空格,會被去掉)、動態表、壓縮表。

三、對事務支持情況

MyISAM強調的是性能,每次查詢具有原子性,其執行速度比Innodb類型更快,但是不提供事務支持。
可以和其他字段一起建立聯合索引。引擎的自動增長列必須是索引,如果是組合索引,自動增長可以不是第一列,他可以根據前面幾列進行排序后遞增。

四、對鎖支持

只支持表級鎖,用戶在操作myisam表時,select,update,delete,insert語句都會給表自動加鎖,如果加鎖以后的表滿足insert并發的情況下,可以在表的尾部插入新的數據。

五、表行數

保存有表的總行數,如果select count(*) from table;會直接取出出該值。

為什么MyISAM會比Innodb 的查詢速度快

INNODB在做查詢的時候,要維護的東西比MYISAM引擎多
1)INNODB要緩存數據塊,MYISAM只緩存索引塊, 這中間還有換進換出的減少;
2)innodb尋址要映射到塊,再到行,MYISAM 記錄的直接是文件的OFFSET,定位比INNODB要快
3)INNODB還需要維護MVCC一致;雖然你的場景沒有,但他還是需要去檢查和維護

應用場景選擇

MyISAM適合: (1)做很多count 的計算; (2)插入不頻繁,查詢非常頻繁; (3)沒有事務。 InnoDB適合: (1)可靠性要求比較高,或者要求事務; (2)表更新和查詢都相當的頻繁,并且行鎖定的機會比較大的情況。

總結

以上是生活随笔為你收集整理的MySql------存储引擎(InnoDB,ISAM)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。