Mysql 進階學習筆記

目錄

 

MySQL體系結構和引擎

範式:

索引

索引的使用:

視圖:

觸發器:

SQL優化步驟:

SQL優化:

應用優化:

內存管理及優化:

Mysql鎖

SQL技巧:

Mysql日誌:

Mysql複製:

MySQL體系結構和引擎

整個流程是,上層代碼獲取連接池連接,數據庫獲取sql語句,解析,自動優化,放入緩存。調用存儲引擎。在底層文件系統操作數據。

存儲引擎:

重點看InnoDB和MyISAM。都是表級的索引,而非數據庫級別

InnoDB特性:外鍵。

InnoDB存儲方式:

InnoDB還支持事務。

MyISAM:

以下兩個僅瞭解:

 

範式:

以下表爲例:

系這一列不滿足第一範式,因爲這一列又分割成了兩列,所以修改後如下:

滿足第一範式之後依舊存在的問題:

 

因此考慮如何滿足第二範式:

因爲學號和課程名稱可以確定其他所有列是唯一,所以這兩個接近碼,不過這個碼並沒有實現完全依賴,即單學號就可以確定姓名,姓名不依賴於課程。所以要消除部分依賴。因此要對錶進行拆分。

改造後滿足第二範式,但不滿足第三範式:需要消除傳遞依賴即系名依賴於學號,系主任依賴於系名。因此需要再拆分出一張表。

 

索引

簡單概念看圖,索引如何加快查找。innodb底層由B+樹實現。

B樹的構造:

B+樹

索引的分類:

創建索引:默認自動創建主鍵索引的

 

索引設計原則:

索引的使用:

注意查詢複合索引時的具體列。最左原則,必須要複合索引的第一個列纔會使用索引。

解決方案:僅查找索引內的列:覆蓋索引

如果查的列,某一條數據佔用的比例較大,比如99%都是,則不走索引。

底層會自動判斷走不走,主要看數據佔數據表的比例。多則不走索引。

查看索引使用情況:

視圖:

觸發器:

SQL優化步驟:

查詢特定表的影響的行數:global是歷史以來,不加爲當前連接。

這個id指定了表實際的查詢順序。

從上往下,效率越來越低。

filesort和temporary需要優化。

trace分析優化器:

SQL優化:

如果建表有唯一索引,默認會啓用唯一性校驗。手動關閉可加速。

order by優化:

用到的還是索引覆蓋。如果查詢的數據在索引內會有用。

多字段排序,如果一個升序,一個降序不會走索引。

建議使用union來替換:求並集。

思路二需要主鍵自增,且不能出現斷層。

忽略索引:

注意和use index的區別。force是強制使用的。

應用優化:

內存管理及優化:

 

注意兩者區別,Innodb還緩存數據塊和索引塊,myisam只緩存索引塊。

Mysql鎖

加了寫鎖,其他事務讀寫都得等。

InnoDB行鎖:

SQL技巧:

日期函數:

Mysql日誌:

Mysql複製:

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章