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