Mysql--回顧提要
一、寫在前
知識學了就忘!不用就忘!我太健忘!特此記錄!用於複習打卡!Mysql幹就完事了!
二、來辣!
-
MyISAM表把自增主鍵最大id記錄到檔案,重啟也不會丟。InnoDB記錄到記憶體,重啟資料庫和OPTIMIZE操作會丟。
-
Heap表存在於記憶體,用於臨時高速儲存。BLOB和TEXT不允許,只能=<>>=<=;不支援自增,索引不可為NULL。
-
InnoDB支援的4中隔離級別,及逐級之間的區別。
-
BLOB和TEXT區別:對BLOB值進行排序和比較大小時區分大小寫,對TEXT值不區分。
-
每個MyISAM表以三個檔案儲存在磁碟:表定義:“.frm”;資料檔案:“.MYD”(MYDATA);索引檔案:“.MYI”(MYINDEX)。
-
MySQL表格型別:MyISAM、Heap、Merge、InnoDB、ISAM。5.5之前預設引擎是MyISAM,5.5開始是InnoDB。InnoDB是.frm;.ibd(索引和資料)
-
MySQL優化DISTINCT:DISTNCT在所有列上轉換為GROUP BY,並與ORDER BY子句結合使用。
-
單個索引最多使用16列建立。
-
允許6種觸發器,增刪改的前、後。before update
-
強制關機或斷電可能會導致資料表損壞。
-
MyISAM支援表鎖;InnoDB支援表鎖、行鎖,預設行鎖。還有一個頁面鎖,粒度在中間。
-
MySQL查詢快取弊端:頻繁更新的表,一更新就失效,不安逸。8.0版本被刪了。
-
MyISAM和InnoDB區別:InnoDB支援行鎖、事務、多版本併發控制(MVVC)、外來鍵、聚集索引;MyISAM支援全文索引,InnoDB部分版本不支援(可使用Sphinx外掛)。
-
通過整庫備份+binlog可以恢復半個月前日誌,前提有備份和日誌。
-
優化:儘量使用主鍵查詢:聚簇索引上儲存了全部資料,相比普通索引,減少了回表的消耗;MySQL5.6之後引入了索引下推優化,適當使用聯合索引,減少回表消耗;若頻繁查詢某一列,考慮利用覆蓋索引避免回表;最左原則:聯合索引將高頻欄位放最左邊。
-
資料庫三正規化:1屬性不可再分(每列只有一個值);2每行可以被唯一區分(加主鍵);3不含其它表已包含了的非主鍵資訊。
-
limit offset由於掃描過多資料越往後查詢越慢。存在有序id時:可配合當前頁最後一條id進行查詢,where id > #{id} limit #{limit}。
-
資料量越來越大導致查詢慢:分庫分表,根據時間拆分,id最好包含時間(如雪花演算法),這樣既能根據id直接獲取,也能按照時間進行查詢。
-
char和varchar區別:char長度固定為宣告長度,1~255,儲存時用空格填充,檢索時刪除。
-
候選鍵和主鍵:超鍵(學號+姓名)(學號)。候選鍵(學號)。主鍵(學號)。外來鍵(學號在另一張表做外來鍵)。不含多餘屬性的超鍵=候選鍵。我從候選鍵中選一個作為主鍵。
-
資料增量大調優:允許資料冗餘,避免join查詢;欄位型別和儲存引擎合理,適當新增索引;主從讀寫分離;合理分表,減少單表資料量提高查詢速度;新增快取;不用select *;
-
鎖的優化:讀寫分離;分段加鎖;減少鎖持有時間;多執行緒儘量按順序獲取鎖;鎖不能過度細化,避免頻繁加鎖和釋放。
-
索引底層和優化:B+樹,在所有葉子節點增加了指向下一個葉子節點的指標,所以InnoDB建議大部分表使用自增主鍵作為主索引。
-
索引失效:以%開頭的like語句;OR語句前後沒有同時使用索引;資料型別隱式轉換(varchar不加單引號可能轉成int型)
-
優化MySQL:語句與索引;資料庫表結構;系統配置;硬體。
-
優化資料庫:選取合適的欄位屬性,減少欄位寬度,儘量設定成not null,省份、性別設定成ENUM;使用join代替子查詢;使用聯合(UNION)代替手動建立的臨時表;事務處理;鎖定表,優化事務處理;適用外來鍵,優化鎖定表;建立索引;優化查詢語句。
-
索引是一種特殊檔案,InnoDB的索引是表空間的一部分,包含對資料表裡所有記錄的引用指標。普通索引唯一任務是加快對資料的訪問速度,允許重複值;唯一索引保證資料的唯一性,可以null;主鍵是特殊的唯一索引,不能為null,用PRIMARY KEY建立;聯合索引。
-
防止SQL注入:用#不用$;過濾關鍵詞update、insert、delete、select、*;SQL語句儘量不省略雙引號和單引號;資料庫表名和欄位名命名技巧,防止被猜;開啟配置檔案中的 magic_quotes_gpc 和 magic_quotes_runtime 設定;執行 sql 語句時使用 addslashes 進行 sql 語句轉換。
-
資料定義DDL: Create Table,Alter Table,Drop Table, Craete/Drop Index 等;資料操縱DML: Select ,insert,update,delete;資料控制DCL: grant,revoke ;資料查詢DQL: select
-
MVCC:併發版本控制:相當於為每個修改儲存一個版本,版本與事務時間戳關聯,讀操作只讀
該事務開始前的資料庫快照。它是通過資料庫記錄中的隱式欄位Undo日誌、Read Riew操作實現的。好處:併發讀寫資料庫的時候,提高速度;實現讀一致性,解決髒讀、幻讀、不可重複度問題;採用樂觀鎖或悲觀鎖操作解決寫和寫的從衝突。
三、寫在後
只是簡要知識點概括,看到就能回憶起相關內容為最妙~~直接評論打卡,開整!!!