1. 程式人生 > 其它 >mysql 資料庫方面的知識

mysql 資料庫方面的知識

https://www.cnblogs.com/sharpest/p/10390035.html

儲存引擎 :儲存引擎是一種用來儲存MySQL中物件(記錄和索引)的一種特定的結構(檔案結構),處於MySQL伺服器的最底層,直接儲存資料。導致上層的操作,依賴於儲存引擎的選擇。

InnoDB ==>5.5 預設的儲存引擎 、事務安全型儲存引擎 、MySQL推薦使用的儲存引擎。支援事務,行級鎖定,外來鍵約束  

  假如建立一個test 資料庫 ,新建一張student表,選擇儲存引擎為innodb 會在mysqlserver 、data 資料夾下面的test目錄生成三個檔案

  db.opt : 存放了資料庫的配置資訊,比如資料庫的字符集還有編碼格式

  student.frm:是表結構檔案,僅儲存了表的結構、元資料(meta),包括表結構定義資訊等

  student.idb:是表索引檔案,包括了單獨一個表的資料及索引內容。

  如果往表裡插入了新的資料,則在mysql的data目錄下會生成ibdata1檔案,這個檔案是儲存了所有innodb表的資料。


使用innodb引擎時,需要理解獨立表空間、共享表空間。

獨立表空間: 個表都會生成以獨立的檔案方式來儲存,每個表都一個.frm的描述檔案,還有一個.ibd檔案

        每個表都有自己獨立的表空間;每個表的資料和索引都會儲存在各個獨立的表空間中;可以實現單表在不同的資料進行遷移;

共享表空間:可以將表空間分成多個檔案存放在各個磁碟上,資料和檔案放在一起方便管理

innodb_file_per_table=1 為使用獨佔表空間

innodb_file_per_table=0 為使用共享表空間

innodb_data_home_dir 代表為資料庫檔案所存放的目錄

innodb_log_group_home_dir 為日誌存放目錄

innodb_file_per_table 是否使用共享以及獨佔表空間來

innodb_data_file_path=ibdata1:10M:autoextend(可擴充套件大小的尺寸為10MB的單獨檔案,名為ibdata1)

1、資料按照主鍵順序儲存:插入時做排序工作,效率低。

事務、外來鍵約束 : 都是為了維護資料的完整性。

innodb擅長處理併發的 row-level locking,實現了行級鎖定,在一定情況下,可以選擇行級鎖來提升併發性。

總結:innodb擅長事務、資料的完整性及高併發處理,不擅長快速插入(插入前要排序,消耗時間)和檢索。


MyISAM儲存引擎介紹

MySQL<= 5.5 MySQL預設的儲存引擎。

ISAM:Indexed Sequential Access Method(索引順序存取方法)的縮寫,是一種檔案系統。

擅長與處理,高速讀與寫。

資料和索引分別儲存於不同的檔案中。

frm/ 結構

myd/ 資料

myi/ 索引

(3)功能

a.全文索引支援。(mysql>=5.6時innodb 也支援)

b.資料的壓縮儲存。.MYD檔案的壓縮儲存。

進行壓縮:使用工具 myisamPack完成壓縮功能:該工具mysql自帶


慢查詢日誌的使用

show variables like "%slow_query%" 查詢是否開啟 慢查詢 、慢查詢日誌輸出層log

show variables like "%long_query%" 查詢慢查詢的臨界值

開啟日誌

set global slow_query_log=1;

設定臨界值

set long_query_time=0.5; (超過這個時間 輸出到慢查詢日誌層)


分割槽分表

分表和表分割槽的目的就是減少資料庫的負擔,提高資料庫的效率,通常點來講就是提高表的增刪改查效率。

分割槽,partition,分割槽是將資料分段劃分在多個位置存放,可以是同一塊磁碟也可以在不同的機器。分割槽後,表面上還是一張表,但資料雜湊到多個位置了。

app讀寫的時候操作的還是大表名字,db自動去組織分割槽的資料。

Tip:分割槽與儲存引擎無關,是MySQL邏輯層完成的。

MySQL提供4種分割槽演算法:取餘:Key,hash 條件:List,range 。

垂直分表

一張表中存在多個欄位。這些欄位可以分為常用欄位和非常用欄位,為了提高查錶速度,我們可以把這兩類欄位分開來儲存。主要目的,減少每條記錄的長度。


伺服器架構介紹

伺服器架構,不僅僅是用一臺MySQL