本篇文章講述了mysql數據庫的存儲引擎,那么不太了解mysql數據庫存儲引擎的同學和我們引擎來看看本篇關于mysql數據庫的存儲引擎講述的文章吧!
優化結構介紹:
類型 | 含義 |
---|---|
存儲層 | 存儲引擎、字段類型選擇、范式設計 |
設計層 | 索引、緩存、分區(分表) |
架構層 | 多個mysql服務器設置,讀寫分離(主從模式) |
sql語句層 | 多個sql語句都可以達到目的的情況下,要選擇性能高、速度快的sql語句 |
存儲引擎
存儲引擎:我們使用的數據是通過一定的技術存儲在數據庫當中的,數據庫的數據是以文件形式存儲到硬盤當中的。技術不只一種,并且每種技術有自己獨特的性能和功能體現。存儲數據的技術和其功能的合并就稱為“存儲引擎”。
-
在mysql中經常使用的存儲引擎:Myisam或Innodb等等。
-
數據庫的數據存儲在不同的存儲引擎里邊,所有的特性就與當前的存儲引擎有一定關聯。 需要按照項目的需求、特點選擇不同的存儲引擎。
-
查看mysql中支持的全部存儲引擎:
innodb
數據庫每個數據表的數據設計三方面信息:表結構、數據、索引
-
技術特點:支持事務、行級鎖定、外鍵
表結構、數據、索引的物理存儲
-
創建一個innodb數據表:
-
表結構文件:
該類型 數據、索引 的物理文件位置:
-
所有innodb表的數據和索引信息都存儲在以下ibdata1文件中
給innodb類型表 的數據和索引創建自己對應的存儲空間:
-
默認情況下每個innodb表的 數據和索引 不會創建單獨的文件存儲
-
設置mysql數據庫,使得每個innodb表有獨特的數據和索引 存儲文件:
-
重新創建order2數據表:
-
此時order2數據表有單獨的數據和索引存儲文件:
-
后期無論innodb_file_per_table的設置狀態如何變化,order2的數據和索引都有獨立的存儲位置
數據存儲順序
-
innodb表數據的存儲是按照主鍵的順序排列每個寫入的數據。
該特點決定了該類型表的寫入操作較慢。
事務、外鍵
該類型數據表支持事務、外鍵
-
事務:http://blog.csdn.net/change_any_time/article/details/79488020
外鍵:兩個數據表A和B,B表的主鍵是A表的普通字段,在A表看這個普通的字段就是該表的“外鍵”,外鍵的使用有”約束”。
?約束:以上兩個表,必須先寫B表的數據,再寫A表的數據,并且 A表的外鍵取值必須來之B表的主鍵id值,不能超過其范圍。
-
真實項目里邊很少使用“外鍵”,因為有約束。
并發性
該類型表的并發性非常高,多人同時操作該數據表,為了操作數據表的時候,數據內容不會隨便發生變化,要對信息進行“鎖定”
?該類型鎖定級別為:行鎖。只鎖定被操作的當前記錄。
Myisam
結構、數據、索引獨立存儲 ,該類型的數據表 ?表結構、數據、索引 都有獨立的存儲文件:
-
創建Myisam數據表
-
每個myisam數據表的 結構、數據、索引 都有獨立的存儲文件
表文件類型 | 含義 |
---|---|
*.frm | 表結構文件 |
*.MYD | 表數據文件 |
*.MYI |
表索引文件 |
特點:獨立的存儲文件可以單獨備份、還原。
數據存儲順序
-
myisam表數據的存儲是按照自然順序排列每個寫入的數據。
該特點決定了該類型表的寫入操作較快。
并發性
該特點決定了該類型表的寫入操作較快。
壓縮機制
如果一個數據表的數據非常多,為了節省存儲空間,需要對該表進行壓縮處理。
-
復制當前數據表的數據:
-
不斷復制使得order3數據表的數據變為200多萬條:
-
對應的存儲該200萬條信息的文件的物理大小為40多兆:
開始壓縮order3數據表的數據
-
壓縮工具:myisampack.exe ?表名
-
重建索引:myisamchk.exe ?-rq ?表名
-
解壓縮工具:myisamchk.exe ?–unpack ?表名
-
order3表信息被壓縮的60%的空間:
-
order3數據表有壓縮,但是索引沒有了:
-
重建索引:
-
索引果然被重建完畢:
-
刷新數據表:flush table ?表名
-
出現情況:壓縮的數據表是只讀表,不能寫信息:
壓縮的數據表有特點:不能頻繁的寫入操作,只是內容固定的數據表可以做壓縮處理,例如(存儲全國地區信息的數據表等)
?如果必須要寫數據:就解壓該數據表,寫入數據,再壓縮
-
解壓order3數據表,使得其可以寫入數據:(解壓同時索引自動重建)
-
數據解壓完畢:
-
執行flush操作,更新解壓后的數據:flush table ?表名;該操作同時會刪除order3.MYD.00996D46.deleted的壓縮備份文件
-
此時允許給order3繼續寫入數據:
innodb存儲引擎:適合做修改、刪除 ?
?Myisam存儲引擎:適合做查詢、寫入
Archive
innodb存儲引擎:適合做修改、刪除 ?
?Myisam存儲引擎:適合做查詢、寫入
memory
內存型存儲引擎,操作速度非常快速,比較適合存儲臨時信息,服務器斷電,給存儲引擎的數據立即丟失。
存儲引擎的選擇
Myisam和innodb
-
網站大多數情況下“讀和寫”操作非常多,適合選擇Myisam類型(例如: dedecms、phpcms內容管理系統(新聞網站)、discuz論壇)
-
網站對業務邏輯有一定要求(辦公網站、商城)適合選擇innodb (Mysql5.5默認存儲引擎都是innodb)