設計範式mysql
第一範式(二維數據表)sql
第二範式(要求數據表中非關鍵字不存在對組合關鍵字中字段函數依賴)數據庫
第三範式(要求數據表中非關鍵字不存在對組合關鍵字中字段或單一關鍵字的函數依賴)、BC範式(若是是複合關鍵字,可選的複合關鍵字之間不能存在函數依賴)數據庫設計
存儲引擎函數
mysql目前最經常使用的存儲引擎是Innodb優化
數據庫設計原則設計
避免使用觸發器:3d
由於會下降數據導入的效率,還可能出現意想不到的數據異常,或者是業務邏輯變得複雜,不利於維護(有可能後續維護的人不知道觸發器的存在,項目運行的時候依然會觸發觸發器,使理解變得困難)blog
禁止使用預留字段:索引
數據庫索引優化:
數據庫表優化:垂直拆分、水平拆分
數據庫基礎
Join從句:
- Inner Join
- Left Outer Join
- Right Outer Join
- Full Join(其實是左鏈接和右鏈接的合集)
My SQL 不支持Full Join查詢,可採用UNION ALL 左鏈接和右鏈接來實現Full Join的查詢結果
- cross join笛卡爾鏈接
笛卡爾鏈接不須要提供鏈接關鍵詞。
查詢結果集中數據條數 = user1中數據條數 * user2中數據條數
- 使用join更新表
MySQL不支持更新包含在from從句中的表(即過濾條件中包含自身的表)
支持更新Update從句中的表
- 使用join優化子查詢
優化前:
優化後:(減小子查詢的次數,縮短查詢時間)
- 使用join優化聚合查詢
查詢取經四人組中成員各自打怪最多的日期
優化前:
優化後:(減小子查詢,下降查詢時間)
HAVING 子句對 GROUP BY 子句設置條件的方式與 WHERE 和 SELECT 的交互方式相似。WHERE 搜索條件在進行分組操做以前應用;而 HAVING 搜索條件在進行分組操做以後應用。HAVING 語法與 WHERE 語法相似,但 HAVING 能夠包含聚合函數。HAVING 子句能夠引用選擇列表中顯示的任意項。
- 實現分組選擇數據
查詢孫悟空、沙僧、豬八戒、唐僧打怪數量最多的兩個日期
分別查詢,使用的查詢語句:
使用join查詢語句一次查出全部數據: