mysql優化理解筆記(持續更新)

2022-08-12 17:06:11 字數 1247 閱讀 6279

目前最常見的是innodb和myisam兩個儲存引擎

(1)innodb:支援事務處理,提供行級鎖、外來鍵約束索引,行鎖

(2)myisam:支援全文搜尋,表鎖

對於經常需要增刪改操作的表建議使用innodb,因為有事務處理(要麼成功要麼失敗回滾),而需要大量查詢操作的表建議用myisam

索引可以大大提高mysql的檢索速度

(1)普通索引:由關鍵字key或index定義的索引,唯一任務就是加快訪問速率

(2)唯一索引:索引列的值必須唯一,但允許有空值,每個表可以有多個唯一索引,唯一索引不可以被其他表引用為外來鍵

(3)主鍵:主鍵索引是唯一索引的特定型別,它要求主鍵中的每個值都唯一,並且不能為空,每個表只能有乙個主鍵,可以被其他表引用為外來鍵

但是索引並不是越多越好,可能加快了select但又減慢了update和insert

(1)維護重建索引要耗費時間,這種時間會隨著資料量的增加而增加

(2)索引需要佔物理空間

(3)對錶的資料進行增刪改時,索引需要動態的維護,這樣就降低了資料的維護速度

對於常用where及 order by 的列可以新增索引加快查詢速率

(1)select時,不要用*,而是寫需要獲取的欄位名,避免獲取多餘的資料浪費資源

(2)select時,避免在 where 子句中使用 or 來連線條件,可以用union。select id from player where status=1 union select id from player where status=2;

(3)盡量使用union all替代union,因為當結果集很大的時候,還要去移除重複的記錄會很浪費資源,如果需要資料唯一的話,可以新增唯一索引

(4)盡量使用inner join替代left join,因為inner join的效率更高,它只需選出能匹配的記錄,不需要返回左表不能匹配的項

(4)select時,where子句對表字段避免用對null值判斷,盡量設定字段預設值為 0或其他

(5)用exist和not exist 替換in和not in

(6)避免在where查詢時進行表示式操作

(7)使用join代替子查詢

(8)可以使用explain分析sql執行效率

(9)可以檢視慢查詢日誌,檢視哪些sql比較慢,對應進行修改,

用set profiling=1;設定慢查詢日誌開啟,

用show profiles;檢視慢查詢日誌內容,

用show profile for query id值;檢視具體的花費時間

SQL 優化筆記,持續更新

sql var x number sql exec x 90 pl sql procedure successfully completed.sql set autot exp usage set autot race exp lain stat istics sql set autot trace...

mysql 大表優化 持續更新

單錶優化 除非單錶資料未來會一直不斷 否則不要一開始就考慮拆分,拆分會帶來邏輯 部署 運維的各種複雜度,一般以整型值為主的表在千萬級以下,字串為主的表在五百萬以下是沒有太大問題的。而事實上很多時候mysql單錶的效能依然有不少優化空間,甚至能正常支撐千萬級以上的資料量 字段 索引 查詢sql 總結 ...

mysql優化積累 持續更新中

大表資料查詢 主從複製 讀寫分離 垂直拆分 水平切分 資料庫設計和查詢原則 盡量設定主鍵 推薦使用自增id,不要使用uuid 字段定義為not null而不是null 密碼雜湊,鹽,使用者身份證號等固定長度的字串應該使用char而不是varchar來儲存,這樣可以節省空間且提高檢索效率。避免犯如下s...