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