日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

ruhr启动mysql数据库_Mysql表类型(存储引擎)的选择

發(fā)布時間:2023/12/1 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ruhr启动mysql数据库_Mysql表类型(存储引擎)的选择 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

以下內(nèi)容轉(zhuǎn)載自:https://www.cnblogs.com/jswang/p/6923911.html

7.1 mysql存儲引擎概述

插件式存儲引擎是mysql數(shù)據(jù)庫最重要的特性之一,用戶可以根據(jù)應(yīng)用的需要選擇ruhr存儲和索引數(shù)據(jù),是否使用事務(wù)等。

InnoDB和BDB提供事務(wù)安全表,其他存儲引擎都是非事務(wù)安全表

創(chuàng)建新表時如果不指定存儲引擎,那么系統(tǒng)就會使用默認存儲引擎,mysql5.5之前的默認引擎時MyISAM,之后是InnoDB(關(guān)鍵字:ENGINE)

7.2 各種存儲引擎的特性

7.2.1 MyISAM

缺點:不支持事務(wù),也不支持外鍵

優(yōu)點:訪問速度快,對事務(wù)的完整性沒有要求或者以select、insert為主的應(yīng)用基本上都可以使用這個引擎來創(chuàng)建

MyISAM再磁盤上存儲成三個文件,其文件名都和表名相同,但擴展名分別是:.frm(存儲表定義),.MYD(存儲數(shù)據(jù)),.MYI(存儲索引)

數(shù)據(jù)文件和索引文件可以放置在不同的目錄,平均分布IO,獲得更快的速度。通過(創(chuàng)建表時DATA DIRECTORY和INDEX DIRECTORY(需要時據(jù)對路徑,和訪問權(quán)限))

MyISAM類型的表可能會損壞,原因可能是多種多樣,check table ,repair table。

表損壞可能導(dǎo)致數(shù)據(jù)庫異常重新啟動,需要盡快修復(fù)并盡可能地確認損壞的原因。

MyISAM表嗨支持3中不同的存儲格式:1.靜態(tài)(固定長度)表 2.動態(tài)表 ?3.壓縮表

靜態(tài)表是默認的存儲格式。靜態(tài)表中的字段都是非變長字段,這樣每個記錄都是固定長度,這種存儲的優(yōu)點是存儲非常迅速,容易緩存,出現(xiàn)故障容易恢復(fù);缺點是占用的空間通常比動態(tài)表多。靜態(tài)表的數(shù)據(jù)再存儲時會按照列的寬度定義補足空格,但是在應(yīng)用訪問的時候不會得到這些空格。但是需要特別注意的問題,如果需要保存的內(nèi)容后面本來就有空格,那么在返回的時候也會被去掉。

動態(tài)表中包含變長的字段,記錄不是固定長度的。這樣優(yōu)點是節(jié)省存儲空間,但是頻繁的更新和刪除記錄會產(chǎn)生碎片,需要定期執(zhí)行optimize table 或 myisamchk-r命令來改善性能,并且在出現(xiàn)故障時恢復(fù)起來比較困難。

壓縮表由myisampack工具創(chuàng)建,占據(jù)非常小的磁盤空間,因為每個記錄是被單獨壓縮的,所以只有非常小的訪問開支。

7.2.2 InnoDB

InnoDB存儲引擎提供了具有提交、回滾和崩潰恢復(fù)能力的事務(wù)安全。但是對比MyISAM,處理效率差一些,并且會占用更多的磁盤空間以保留數(shù)據(jù)和索引。

1.自動增長列

如果插入的是空或者0,則實際插入的僵尸自動增長后的值。通過“alter table *** auto_increment = n”語句強制設(shè)置自動增長列的初始值,如果在使用之前重新啟動數(shù)據(jù)庫,則需要重新設(shè)置,不設(shè)置默認初始值為1.對于InnoDB表來說自動增長列必須是索引。如果是組合索引,也必須是組合索引的第一列,但是對于MyISAM表,自動增長列可以是組合索引的其他列,這樣插入記錄后,自動增長列按照組合索引前面幾列進行排序后遞增的。

2.外鍵約束

MySQL支持外鍵的存儲引擎只有InnoDB,在創(chuàng)建外鍵的時候,要求父表必須有對應(yīng)的索引,字表在創(chuàng)建外鍵的時候也會自動創(chuàng)建對應(yīng)的索引。

當(dāng)某個表被其他表創(chuàng)建的外鍵參照,那么該表的對應(yīng)索引或者主鍵禁止被刪除。

在導(dǎo)入多個表的數(shù)據(jù)時,如果需要忽略表之前的導(dǎo)入順序,可以暫時關(guān)閉外鍵的檢查,在處理LOAD DATA 和 ALTER TABLE操作的時候,可以關(guān)閉外鍵約束來加快處理速度,“set foreign_key_checks = 0(1開)”

對于InnoDB類型的表,外鍵信息通過使用show create table 或者 show table status命令顯示

3.存儲方式

InnoDB存儲表和索引有以下兩種方式。

使用共享表空間存儲,這種方式創(chuàng)建的表的表結(jié)構(gòu)保存在.frm文件中,數(shù)據(jù)和索引保存在innodb_data_home_dir和innodb_data_file_path定義的表空間中,可以是多個文件。

使用多表空間存儲,這種方式創(chuàng)建的表的表結(jié)構(gòu)仍然保存在.frm文件中,但是每個表的數(shù)據(jù)和索引單獨保存在.ibd中。如果是分區(qū)表,則每個分區(qū)對應(yīng)單獨的.ibd文件,文件名是“表名+分區(qū)名”,可以在創(chuàng)建分區(qū)的時候指定每個分區(qū)的數(shù)據(jù)文件的位置,一次來將表的IO均勻的分布在多個磁盤上。要使用多表空間的存儲方式,需要設(shè)置參數(shù)innodb_file_per_table,并且重啟服務(wù)才能生效,對于新建的表按照多表空間的方式創(chuàng)建,已經(jīng)有的仍然使用共享表空間存儲。多表空間的數(shù)據(jù)文件沒有大小限制,不需要設(shè)置初始化大小,也不需要設(shè)置文件的最大限制、擴展大小等參數(shù)。對于使用多表空間特性的表,可以比較方便地進行單表備份和恢復(fù)操作,

7.2.3 MEMORY

MEMORY存儲引擎使用存在于內(nèi)存中的內(nèi)容來創(chuàng)建表。每個MEMORY表只實際對應(yīng)一個磁盤文件,格式是.frm。MEMORY類型的表訪問非常地快,因為它的數(shù)據(jù)是放在內(nèi)存中的,并且默認使用HASH索引,但是一旦服務(wù)關(guān)閉,表中的數(shù)據(jù)就會丟掉。服務(wù)器需要足夠的內(nèi)存來維持所有在同一時間使用的MEMORY表,當(dāng)不再需要MEMORY表的內(nèi)容是釋放資源。每個MEMORY表中可以放置的數(shù)據(jù)量的大小,收到max_heap_table_size系統(tǒng)變量的約束,這個系統(tǒng)變量的初始值是16MB,通過MAX_ROWS指定表的最大行。

MEMORY類型的存儲引擎主要用于那些內(nèi)容變化不頻繁的代碼表,或者作為統(tǒng)計操作的中間結(jié)果表,便于高效地對中間結(jié)果進行分析并得到最終的統(tǒng)計結(jié)果。對存儲引擎為MEMORY的表進行更新操作要謹慎,因為數(shù)據(jù)沒有寫到磁盤中,所以一定要對下次重啟服務(wù)后如何獲得這些修改后的數(shù)據(jù)。

7.2.4 MERGE

MERGE存儲引擎是一組MyISAM表的組合,這些MyISAM表必須結(jié)構(gòu)相同,MERGE表本生沒有數(shù)據(jù)結(jié)構(gòu),對MERGE類型可以進行查詢、更新、刪除操作,這些操作實際上是對內(nèi)部的MyISAM表進行的

對MERGE類型表進行插入操作,是通過INSERT_METHOD子句定義插入的表,可以有3個不同的值,first、no、last。當(dāng)不定義或者為no時,不能對表進行進行插入操作。

對MERGE表進行drop操作實際上只是刪除MERGE的定義,對內(nèi)部的表沒有任何影響。

MERGE表在磁盤上保留兩個文件,.frm文件存儲表的定義,.MRG文件包含組合表的信息,包括MERGE表由哪些表組成、插入新的數(shù)據(jù)時的依據(jù)。可以通過修改.MRG文件來修改MERGE表,但是修改后要通過flush tables刷新

7.2.4 TokuDB

第三方常用的存儲引擎:列式存儲引擎infobright,高寫性能高壓縮的TokuDB

TokuDB是一個高性能、支持事務(wù)處理的Mysql和MariaDB的存儲引擎,具有高擴展性、高壓縮率、高效的寫入性能,支持大多數(shù)在線DDL操作。

特性:

使用Fractal樹索引保證高效的插入性能

優(yōu)秀的壓縮特性,比InnoDB高近10倍

Hot Schema Changes特性支持在線創(chuàng)建索引和添加、刪除屬性列等DDL操作

使用Bulk Loader達到快速加載大量數(shù)據(jù)

提供主從延遲消除技術(shù)

支持ACID(指數(shù)據(jù)庫事務(wù)正確執(zhí)行的四個基本要素的縮寫。包含:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability))和MVCC(多版本并發(fā)控制)

使用場景:

日志數(shù)據(jù),因為日志通常插入頻繁且存儲量大

歷史數(shù)據(jù),通常不會再有寫操作,可以利用TokuDB的高性能壓縮特性進行存儲

在線DDL比較頻繁的場景,使用TokuDB可以大大增加系統(tǒng)的可用性。

7.2 如何選擇合適的存儲引擎

在選擇存儲引擎時,應(yīng)根據(jù)應(yīng)用特點選擇合適的存儲引擎。對于復(fù)雜的應(yīng)用系統(tǒng),還可以根據(jù)實際情況選擇多種存儲引擎進行組合。

MyISAM:默認的Mysql插件式存儲引擎(5.5之前)。如果應(yīng)用是以讀操作和插入操作為主,只有少量的更新和刪除操作,并且對事務(wù)的完整性、并發(fā)性要求不是很高,那么選擇這個存儲引擎非常合適。例如:Web、數(shù)據(jù)倉庫和其他應(yīng)用環(huán)境下最常用的存儲引擎之一

InnoDB:用于處理事務(wù)應(yīng)用程序,支持外鍵。如果應(yīng)用對事務(wù)的完整性有較高的要求,在并發(fā)條件下要求數(shù)據(jù)的一致性,數(shù)據(jù)除了插入查詢之外,還包括很多的更新、刪除操作,那么InnoDB存儲引擎應(yīng)該是比較合適的。InnoDB存儲引擎除了有效的降低由于刪除和更新導(dǎo)致的鎖定,還可以確保事務(wù)的完整的提交和回滾,對于類似計費系統(tǒng)或者財務(wù)系統(tǒng)等對數(shù)據(jù)準確性要求比較高的系統(tǒng),InnoDB都是合適的選擇。

MEMORY:將所有的數(shù)據(jù)保存在RAM中,在需要快速定位記錄和其他類似數(shù)據(jù)的環(huán)境下,可提供幾塊的訪問,MEMORY的缺陷是對表的大小有限制,太大的表無法緩存在內(nèi)存中,其次是要確保表的數(shù)據(jù)可以恢復(fù),數(shù)據(jù)庫異常終止后表中的數(shù)據(jù)數(shù)據(jù)是可以恢復(fù)的。MEMORY表通常更新不太頻繁的小表,用以快速得到訪問結(jié)果。

MERGE:用于將一系列的MyISA表以邏輯方式組合在一起,并作為一個對象引用它們。有點突破了單個MyISAM表大小的限制,并且通過將不同的表分布在多個磁盤上,可以有效地改善MERGE表的訪問效率。這對于數(shù)據(jù)倉庫等VLDB(超大型數(shù)據(jù)庫)環(huán)境十分合適。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的ruhr启动mysql数据库_Mysql表类型(存储引擎)的选择的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。