一、寫在前 知識學了就忘!不用就忘!我太健忘!特此記錄!用於複習打卡!Mysql乾就完事了! 二、來辣! MyISAM表把自增主鍵最大id記錄到文件,重啟也不會丟。InnoDB記錄到記憶體,重啟資料庫和OPTIMIZE操作會丟。 Heap表存在於記憶體,用於臨時高速存儲。BLOB和TEXT不允許,只能= ...
一、寫在前
知識學了就忘!不用就忘!我太健忘!特此記錄!用於複習打卡!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操作實現的。好處:併發讀寫資料庫的時候,提高速度;實現讀一致性,解決臟讀、幻讀、不可重覆度問題;採用樂觀鎖或悲觀鎖操作解決寫和寫的從衝突。
三、寫在後
只是簡要知識點概括,看到就能回憶起相關內容為最妙~~直接評論打卡,開整!!!
作者: letscrazy
出處: https://www.cnblogs.com/letscrazy/
關於作者:letscrazy
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出, 原文鏈接 如有問題, 可郵件([email protected])咨詢.