mysql的存儲引擎


1.存儲引擎的概念

  

   當一個大型的系統存在性能瓶頸是,我們采用分庫處理時多存儲引擎的優勢就發揮出來了。

 

2.查看存儲引擎

  查詢所有的引擎:

    show engines;

 

  當前使用的引擎:

     show variables like '%storage_engine%'

 

3.MYISAM與InnoDB的區別

  

  

 

二:詳細說明

1.myIsam

  不支持事務
  表級鎖定
  讀寫相互阻塞,寫入不能讀,讀時不能寫
  只緩存索引
  不支持外鍵約束
  不支持聚簇索引
  讀取數據較快,占用資源較少
  不支持MVCC(多版本並發控制機制)高並發
  崩潰恢復性較差
  MySQL5.5.5前默認的數據庫引擎
 
  

  使用這個存儲引擎,每個MyISAM在磁盤上存儲成三個文件。

  (1)frm文件:存儲表的定義數據

  (2)MYD文件:存放表具體記錄的數據

  (3)MYI文件:存儲索引

  frm和MYI可以存放在不同的目錄下。MYI文件用來存儲索引,但僅保存記錄所在頁的指針,索引的結構是B+樹結構。

 

2.innodb

  對Innodb的特點做以下總結;

  更新密集的表。InnoDB存儲引擎特別適合處理多重並發的更新請求。

  事務。InnoDB存儲引擎是支持事務的標准MySQL存儲引擎。

  自動災難恢復。與其它存儲引擎不同,InnoDB表能夠自動從災難中恢復。

  外鍵約束。MySQL支持外鍵的存儲引擎只有InnoDB。

  支持自動增加列AUTO_INCREMENT屬性。

  支持行級鎖。

  具有非常高效的緩存特性:能緩存索引,也能緩存數據。

  支持分區,表空間,類似oracle數據庫。

  讀寫阻塞與事務隔離級別相關

  支持聚簇索引

  支持MVCC高並發
  從MySQL5.5后支持全文索引

 

  innodb_file_per_table  on:表示獨立表空間,OFF:表示系統表空間。5.6之前是系統表空間,之后為獨立表空間。

  

 

 

 

3.memory

  將數據存在內存,為了提高數據的訪問速度,每一個表實際上和一個磁盤文件關聯。文件是frm。

  (1)支持的數據類型有限制,比如:不支持TEXT和BLOB類型,對於字符串類型的數據,只支持固定長度的行,VARCHAR會被自動存儲為CHAR類型;

  (2)支持的鎖粒度為表級鎖。所以,在訪問量比較大時,表級鎖會成為MEMORY存儲引擎的瓶頸;

  (3)由於數據是存放在內存中,一旦服務器出現故障,數據都會丟失;

  (4)查詢的時候,如果有用到臨時表,而且臨時表中有BLOB,TEXT類型的字段,那么這個臨時表就會轉化為MyISAM類型的表,性能會急劇降低;

  (5)默認使用hash索引。

  (6)如果一個內部表很大,會轉化為磁盤表。

 

4.csc  

  數據以文本方式存儲,表的字段不能為空,不能有主鍵。

  .frm , .csv數據的內容, .csm存儲表的元數據 。

  使用文本編輯器可以直接編輯.csv數據,然后保存,在數據庫里面執行flush  tables;

  要在最后一行數據回車一下,要不然最后一條數據不展示。

  特點:

    以CSV格式進行數據存儲,所有列的字段都不能為null,不支持索引,可以對數據文件在線編輯。

 

5.archive

  以zlib對表數據進行壓縮,磁盤I/O更少,數據存儲在.ARZ。

  .frm , .ARZ數據的內容。

  特點:

    只支持insert和select操作,只允許在自增ID列上加索引。

  使用場景:

    日志和數據采集應用

 

6.Federated

  訪問遠程的數據庫表,本地只保存數據庫結構和連接信息,數據保存在遠程的服務器中。在本地只保存.frm

  默認不是開啟的引擎,在my.ini  增加 federated=1,重啟。

  

  只能用命令創建。create table ‘aaa’(里面的字段,要和連接的服務器一樣) engine=federated connection='mysql://用戶名:密碼@地址:IP/數據庫名/表名'

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM