對于Mysql數據庫的知識總結
發表時間:2023-09-02 來源:明輝站整理相關軟件相關文章人氣:
[摘要]2017年6月8日,天氣陰。心情晴。 連續做夢兩個晚上了,昨晚竟然夢見一個很長時間不聯系的初中同學了,早上上班的路上聊了聊。女孩現在出差在貴州,風景秀美的地方。我說“你現在生活很滋潤”。女孩說“那是你沒有看到我不滋潤的一面”。確實,在生活中我們總是把自己光鮮的一面展示給別人,而把落魄的一面“...
2017年6月8日,天氣陰。心情晴。 連續做夢兩個晚上了,昨晚竟然夢見一個很長時間不聯系的初中同學了,早上上班的路上聊了聊。女孩現在出差在貴州,風景秀美的地方。我說“你現在生活很滋潤”。女孩說“那是你沒有看到我不滋潤的一面”。確實,在生活中我們總是把自己光鮮的一面展示給別人,而把落魄的一面“偽裝起來”。
昨天博客上有博友問我問題,竟然稱呼我為“大神”,心里慌的很,因為自己很清楚距離這個“大神”相差甚遠,所以得加倍努力,向著“大神”的目標前進。
博友問的問題是關于Mysql數據庫的,其中涉及數據引擎和修復、優化數據表語句,之前從來沒有考慮過這些問題,更沒有用過。所以找了一些資料了解了一下,現在把自己找到的資料總結如下。
1.Mysql數據庫存儲引擎
概念:
存儲引擎其實就是如何實現存儲數據,如何為存儲的數據建立索引以及如何更新,查詢數據等技術實現的方法。MySQL中的數據用各種不同的技術存儲在文件(或內存)中,這些技術中的每一種技術都使用不同的存儲機制,索引技巧,鎖定水平并且最終提供廣泛的不同功能和能力。在MySQL中將這些不同的技術及配套的相關功能稱為存儲引擎。
(1)innoDB存儲引擎
①innodb存儲引擎的mysql表提供了事務,回滾以及系統崩潰修復能力和多版本并發控制的事務安全。
②innodb支持自增長列(auto_increment),自增長列的值不能為空,如果在使用的時候為空的話怎會進行自動從現有的值開始增長,如果有但是比現在的還大,則就保存這個值。
③innodb存儲引擎支持外鍵(foreign key),外鍵所在的表稱為子表(或從表),而所依賴的表稱為父表(或主表)。
④innodb存儲引擎最重要的是支持事務,以及事務相關聯功能。
⑤innodb存儲引擎支持mvcc的行級鎖。
⑥innodb存儲引擎索引使用的是B+Tree。
(2)MyISAM存儲引擎
1)MyISAM 這種存儲引擎不支持事務,不支持行級鎖,只支持并發插入的表鎖,主要用于高負載的select。
2)MyISAM 類型的表支持三種不同的存儲結構:靜態型、動態型、壓縮型。
①靜態型:就是定義的表列的大小是固定(即不含有:xblob、xtext、varchar等長度可變的數據類型),這樣mysql就會自動使用靜態myisam格式。
使用靜態格式的表的性能比較高,因為在維護和訪問的時候以預定格式存儲數據時需要的開銷很低。但是這高性能是由空間換來的,因為在定義的時候是固定的,所以不管列中的值有多大,都會以最大值為準,占據了整個空間。
②動態型:如果列(即使只有一列)定義為動態的(xblob, xtext, varchar等數據類型),這時myisam就自動使用動態型。
雖然動態型的表占用了比靜態型表較少的空間,但帶來了性能的降低,因為如果某個字段的內容發生改變則其位置很可能需要移動,這樣就會導致碎片的產生。隨著數據變化的怎多,碎片就會增加,數據訪問性能就會相應的降低。
對于因為碎片的原因而降低數據訪問性,有兩種解決辦法:
a、盡可能使用靜態數據類型。
b、經常使用optimize table語句,他會整理表的碎片,恢復由于表的更新和刪除導致的空間丟失。
如果存儲引擎不支持 optimize table , 則可以轉儲并重新加載數據,這樣也可以減少碎片。
③壓縮型:如果在這個數據庫中創建的是在整個生命周期內只讀的表,則這種情況就是用myisam的壓縮型表來減少空間的占用。
3)MyISAM也是使用B+tree索引,但是和Innodb的在具體實現上有些不同。
(3)MEMORY存儲引擎
①memory存儲引擎相比前面的一些存儲引擎,有點不一樣,其使用存儲在內存中的數據來創建表,而且所有的數據也都存儲在內存中。
②每個基于memory存儲引擎的表實際對應一個磁盤文件,該文件的文件名和表名是相同的,類型為.frm。該文件只存儲表的結構,而其數據文件,都是存儲在內存中,這樣有利于對數據的快速處理,提高整個表的處理能力。
③memory存儲引擎默認使用哈希(HASH)索引,其速度比使用B+Tree型要快,如果讀者希望使用B樹型,則在創建的時候可以引用。
④memory存儲引擎文件數據都存儲在內存中,如果mysqld進程發生異常,重啟或關閉機器這些數據都會消失。所以memory存儲引擎中的表的生命周期很短,一般只使用一次。
(4)BlackHole存儲引擎(黑洞引擎)
支持事務,而且支持mvcc的行級鎖,主要用于日志記錄或同步歸檔,這個存儲引擎除非有特別目的,否則不適合使用!
2.Mysql下優化表和修復表
隨著mysql的長期使用,可以通過修復表來優化,優化時減少磁盤占用空間,方便備份。
REPAIR TABLE `table_name` 修復表 OPTIMIZE TABLE `table_name` 優化表
REPAIR TABLE ——用于修復被破壞的表。
OPTIMIZE TABLE—— 優化表,用于回收閑置的數據庫空間。當表上的數據行被刪除時,所占據的磁盤空間并沒有立即被回收,使用了OPTIMIZE TABLE命令后這些空間將被回收,并且對磁盤上的數據行進行重排。
注意:是磁盤上,而非數據庫。
多數時間并不需要運行OPTIMIZE TABLE,只需在批量刪除數據行之后,定期(每周一次或每月一次)進行一次數據表優化操作即可,只對那些特定的表運行。
以上就是關于Mysql數據庫的知識總結的詳細內容,更多請關注php中文網其它相關文章!
學習教程快速掌握從入門到精通的SQL知識。