mysql數據庫的存儲引擎詳細講解

本篇文章講述了mysql數據庫的存儲引擎,那么不太了解mysql數據庫存儲引擎的同學和我們引擎來看看本篇關于mysql數據庫的存儲引擎講述的文章吧!

優化結構介紹:

類型 含義
存儲層 存儲引擎、字段類型選擇、范式設計
設計層 索引、緩存、分區(分表)
架構 多個mysql服務器設置,讀寫分離(主從模式)
sql語句層 多個sql語句都可以達到目的的情況下,要選擇性能高、速度快的sql語句

存儲引擎

存儲引擎:我們使用的數據是通過一定的技術存儲在數據庫當中的,數據庫的數據是以文件形式存儲到硬盤當中的。技術不只一種,并且每種技術有自己獨特的性能和功能體現。存儲數據的技術和其功能的合并就稱為“存儲引擎”。

  • 在mysql中經常使用的存儲引擎:Myisam或Innodb等等。

  • mysql數據庫的存儲引擎詳細講解

    數據庫的數據存儲在不同的存儲引擎里邊,所有的特性就與當前的存儲引擎有一定關聯。 需要按照項目的需求、特點選擇不同的存儲引擎。

  • 查看mysql中支持的全部存儲引擎:
    mysql數據庫的存儲引擎詳細講解

innodb

數據庫每個數據表的數據設計三方面信息:表結構、數據、索引

  • 技術特點:支持事務、行級鎖定、外鍵

mysql數據庫的存儲引擎詳細講解

表結構、數據、索引的物理存儲

  • 創建一個innodb數據表:
    mysql數據庫的存儲引擎詳細講解

  • 表結構文件:

mysql數據庫的存儲引擎詳細講解

該類型 數據、索引 的物理文件位置:

  • 所有innodb表的數據和索引信息都存儲在以下ibdata1文件中

mysql數據庫的存儲引擎詳細講解

給innodb類型表 的數據和索引創建自己對應的存儲空間:

  • 默認情況下每個innodb表的 數據和索引 不會創建單獨的文件存儲

mysql數據庫的存儲引擎詳細講解

  • 設置mysql數據庫,使得每個innodb表有獨特的數據和索引 存儲文件:

mysql數據庫的存儲引擎詳細講解

  • 重新創建order2數據表:

mysql數據庫的存儲引擎詳細講解

  • 此時order2數據表有單獨的數據和索引存儲文件:

mysql數據庫的存儲引擎詳細講解

  • 后期無論innodb_file_per_table的設置狀態如何變化,order2的數據和索引都有獨立的存儲位置

數據存儲順序

  • innodb表數據的存儲是按照主鍵的順序排列每個寫入的數據。

mysql數據庫的存儲引擎詳細講解

該特點決定了該類型表的寫入操作較慢。

事務、外鍵

該類型數據表支持事務、外鍵

  • 事務:http://blog.csdn.net/change_any_time/article/details/79488020

外鍵:兩個數據表A和B,B表的主鍵是A表的普通字段,在A表看這個普通的字段就是該表的“外鍵”,外鍵的使用有”約束”。
?約束:以上兩個表,必須先寫B表的數據,再寫A表的數據,并且 A表的外鍵取值必須來之B表的主鍵id值,不能超過其范圍。

  • 真實項目里邊很少使用“外鍵”,因為有約束。

并發性

該類型表的并發性非常高,多人同時操作該數據表,為了操作數據表的時候,數據內容不會隨便發生變化,要對信息進行“鎖定”
?該類型鎖定級別為:行鎖。只鎖定被操作的當前記錄。

Myisam

結構、數據、索引獨立存儲 ,該類型的數據表 ?表結構、數據、索引 都有獨立的存儲文件:

  • 創建Myisam數據表
    mysql數據庫的存儲引擎詳細講解

  • 每個myisam數據表的 結構、數據、索引 都有獨立的存儲文件
    mysql數據庫的存儲引擎詳細講解

表文件類型 含義
*.frm 表結構文件
*.MYD 表數據文件
*.MYI

表索引文件

特點:獨立的存儲文件可以單獨備份、還原。

數據存儲順序

  • myisam表數據的存儲是按照自然順序排列每個寫入的數據。
    mysql數據庫的存儲引擎詳細講解

    該特點決定了該類型表的寫入操作較快。

并發性

該特點決定了該類型表的寫入操作較快。

壓縮機制

如果一個數據表的數據非常多,為了節省存儲空間,需要對該表進行壓縮處理。

  • 復制當前數據表的數據:
    mysql數據庫的存儲引擎詳細講解

  • 不斷復制使得order3數據表的數據變為200多萬條:
    mysql數據庫的存儲引擎詳細講解

  • 對應的存儲該200萬條信息的文件的物理大小為40多兆:
    mysql數據庫的存儲引擎詳細講解

開始壓縮order3數據表的數據

  • 壓縮工具:myisampack.exe ?表名
    mysql數據庫的存儲引擎詳細講解

  • 重建索引:myisamchk.exe ?-rq ?表名
    mysql數據庫的存儲引擎詳細講解

  • 解壓縮工具:myisamchk.exe ?–unpack ?表名
    mysql數據庫的存儲引擎詳細講解

  • order3表信息被壓縮的60%的空間:
    mysql數據庫的存儲引擎詳細講解

  • order3數據表有壓縮,但是索引沒有了:
    mysql數據庫的存儲引擎詳細講解

  • 重建索引:
    mysql數據庫的存儲引擎詳細講解

  • 索引果然被重建完畢:
    mysql數據庫的存儲引擎詳細講解

  • 刷新數據表:flush table ?表名
    mysql數據庫的存儲引擎詳細講解

  • 出現情況:壓縮的數據表是只讀表,不能寫信息:
    mysql數據庫的存儲引擎詳細講解

壓縮的數據表有特點:不能頻繁的寫入操作,只是內容固定的數據表可以做壓縮處理,例如(存儲全國地區信息的數據表等)
?如果必須要寫數據:就解壓該數據表,寫入數據,再壓縮

  • 解壓order3數據表,使得其可以寫入數據:(解壓同時索引自動重建)
    mysql數據庫的存儲引擎詳細講解

  • 數據解壓完畢:
    mysql數據庫的存儲引擎詳細講解

  • 執行flush操作,更新解壓后的數據:flush table ?表名;該操作同時會刪除order3.MYD.00996D46.deleted的壓縮備份文件
    mysql數據庫的存儲引擎詳細講解

  • 此時允許給order3繼續寫入數據:
    mysql數據庫的存儲引擎詳細講解

innodb存儲引擎:適合做修改、刪除 ?
?Myisam存儲引擎:適合做查詢、寫入

Archive

innodb存儲引擎:適合做修改、刪除 ?
?Myisam存儲引擎:適合做查詢、寫入

memory

內存型存儲引擎,操作速度非常快速,比較適合存儲臨時信息,服務器斷電,給存儲引擎的數據立即丟失。

存儲引擎的選擇

Myisam和innodb

  1. 網站大多數情況下“讀和寫”操作非常多,適合選擇Myisam類型(例如: dedecms、phpcms內容管理系統(新聞網站)、discuz論壇)

  2. 網站對業務邏輯有一定要求(辦公網站、商城)適合選擇innodb (Mysql5.5默認存儲引擎都是innodb)

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊11 分享