查看mysql數據庫的存儲位置:mysql數據文件遷移

簡介

數據庫存儲引擎:是數據庫底層軟件組織,數據庫管理系統(DBMS)使用數據引擎進行創建、查詢、更新和刪除數據。不同的存儲引擎提供不同的存儲機制、索引技巧、鎖定水平等功能,使用不同的存儲引擎,還可以獲得特定的功能。現在許多不同的數據庫管理系統都支持多種不同的數據引擎。MySQL 的核心就是插件式存儲引擎。

查看引擎

可以使用 SHOW ENGINES; 查看當前數據庫支持的所有存儲引擎

性能測試告訴你 mysql 數據庫存儲引擎該如何選?

Engine 列,代表存儲引擎類型;Support 列代表對應存儲引擎是否能用,YES 表示可以用,NO 表示不能用,DEFAULT 表示當前默認的存儲引擎

myql 提供了多種不同存儲引擎,也可以在一個數據庫中,針對不同的要求,使用不同的存儲引擎。

SHOW VARIABLES LIKE ‘%storage_engine%’; 可以查看當前數據庫默認的存儲引擎

性能測試告訴你 mysql 數據庫存儲引擎該如何選?

引擎介紹

  • InnoDB 存儲引擎InnoDB 是事務型數據庫首選引擎,支持事務安全表(ACID),其它存儲引擎都是非事務安全表,支持行鎖定外鍵,MySQL5.5 以後默認使用 InnoDB 存儲引擎。InnoDB 為 MySQL 提供了具有提交回滾崩潰恢復能力的事務安全(ACID 兼容)存儲引擎。InnoDB 表,自動增長列必須是索引,如果是組合索引,也必須是組合索引的第一列。InnoDB 設計的目標是處理大容量的數據庫系統,這種引擎的表會在內存中建立緩衝池,用來緩衝數據和索引。MySQL 外鍵的存儲引擎只有 InnoDB適用場景:經常更新的表,多並發的表大數據量支持事務容災恢復外鍵約束
  • MyISAM 存儲引擎MyISAM 基於 ISAM 存儲引擎,並對其進行擴展。它是在 Web、數據倉儲和其他應用環境下最常使用的存儲引擎之一。MyISAM 擁有較高的插入、查詢速度,但不支持事務,不支持外鍵。MYD 文件是存 MyISAM 的數據文件;MYI 文件是存 MyISAM 的索引文件;frm 文件是存 MyISAM 的表結構MyISAM 的表支持 3 種不同的存儲格式:靜態(固定長度)表,動態表,壓縮表靜態表:表中的字段都是非變長字段,這樣每個記錄都是固定長度的,優點存儲非常迅速,容易緩存,出現故障容易恢復;缺點是佔用的空間通常比動態表多動態表:記錄不是固定長度的,這樣存儲的優點是佔用的空間相對較少;缺點:頻繁的更新、刪除數據容易產生碎片,需要定期執行 OPTIMIZE TABLE 或者 myisamchk-r 命令來改善性能壓縮表:因為每個記錄是被單獨壓縮的,所以只有非常小的訪問開支適用場景不支持事務、外鍵的設計查詢速度很快,極度強調操作,而且不佔用大量的內存和存儲資源整表加鎖
  • MEMORY 存儲引擎Memory 存儲引擎使用存在於內存中的內容來創建表,所以也有叫 HEAP 堆內存引擎。每個 memory 表只實際對應一個磁盤文件,格式是。frm。memory 類型的表訪問非常的快,因為它的數據是放在內存中的,並且默認使用 HASH 索引,但是一旦服務關閉,表中的數據就會丟失掉。MEMORY 存儲引擎的表可以選擇使用 BTREE 索引或者 HASH 索引Hash 索引優點:Hash 索引結構的特殊性,其檢索效率非常高,索引的檢索可以一次定位,查詢效率要遠高於 B-Tree 索引;但是,hash 算法是基於等值計算的,所以模糊查詢,hash 索引無效,不支持適用場景:Memory 類型的存儲引擎主要用於內容變化低、不頻繁的,如代碼表目標數據比較小,而且非常頻繁的進行訪問的數據是臨時的,而且必須立即可用得到的

對存儲引擎為 memory 的表進行更新操作要謹慎,因為數據並沒有實際寫入到磁盤中

  • MERGE MRG-MYISAM 存儲引擎Merge 存儲引擎是一組 MyISAM 表的組合,這些 MyISAM 表必須結構完全相同,merge 表本身並沒有數據,對 merge 類型的表可以進行查詢,更新,刪除操作,這些操作實際上是對內部的 MyISAM 表進行的MRG-MYISAM 是一種水平分表方式存儲引擎,把多個 myisam 的表聚合起來,但是他內部沒有數據,真正的數據依然是 myisam 引擎。使用場景:水平分表
  • BLACKHOLE 黑洞引擎任何寫入此引擎的數據均會被丟棄,不做實際存儲,select 結果永遠為空使用場景複製數據到備份數據庫驗證 dump file 命令的正確性檢測 binlog 功能所需的額外負載充當日誌服務器

存儲引擎對比

  • MyISAM 引擎不支持事務等高級處理,Innodb 支持,提供事務支持、外鍵等高級功能
    • Innodb 引擎是行鎖,但是也不是絕對的,當不確定範圍時,Innodb 還是會鎖表的
  • MyISAM 引擎強調的是性能,讀性能非常好,比 Innodb 速度要快。
    • MySQL 數據庫默認是開啟事務的,Innodb 引擎表,要在提交大量數據時,可以先關閉自動提交事務 set autocommit=0; 待數據執行完後,再開啟事務自動提交 set autocommit=1; 以此來提高速度,不然,大數據提交非常慢
  • 對於 auto_increment 類型的字段, Innodb 中必須包含只有該字段的索引,而 MyISAM 表中,可以和其他字段一起建立聯合索引。
  • MyISAM 支持全文索引(fulltext)、壓縮引擎,Innodb 不支持
  • MyISAM 引擎表索引和數據分開存在兩個不同格式文件中,並且索引是壓縮的;而 Innodb 表的索引和數據是捆綁在一起的,沒有壓縮,所以,同等數據量,Innodb 引擎表佔用的存儲空間更大。
  • Innodb 表數據備份,要先到處 SQL 備份,load table from master 操作對 Innodb 不起作用。要解決這個問題,需要先把表的引擎 Innodb 改成 MyISAM,導入數據後,再改成 Innodb。但要注意,外鍵只有 Innodb 支持,MyISAM 不支持。

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/225579.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-09 14:45
下一篇 2024-12-09 14:45

相關推薦

發表回復

登錄後才能評論