MySQL性能優化
最近看了一篇MySQL優化的ppt,把相關知識點總結一下。
讓數據庫多做它擅長的事情:
儘量不在數據庫做運算
複雜運算移到程序端CPU
儘可能簡單應用MySQL
舉例:md5(xx字段)、ORDER BY RAND()
合理分表不超載
User id
Date
Area
...
一年內的單表數據:純int不超過1000W,含char不超過500W,單庫不超過300-400個表
表字段少而精
IO高效、全表遍歷、表修復快
提高併發、alter table快
單表不超過50個純int字段
道標不超過20個char(10)字段
單表字段數上限控制在20-50個
效率優先、提升性能
適當時犧牲範式、加入冗餘
拒絕3B
大SQL-BIG SQL
大事務-BIG Transaction
大批量-BIG Batch
數字型VS字符串型索引
更高效
查詢更快
佔用空間更小
舉例:用無符號INT存儲IP,而非char(15)
優先使用ENUM或SET
ENUM佔用1字節,轉爲數值運算
舉例:'sex' enum('F','M') COMMENT '性別'
避免使用NULL字段
很難進行查詢優化
NULL列加索引,需要額外空間
含NULL符合索引無效
少用並拆分TEXT/BLOB
text類型處理性能原低於varchar
強制生成硬盤臨時表
浪費更多空間
若必須使用則拆分到單獨的表
謹慎合理添加索引
改善查詢、減慢更新,索引不是越多越好
能不加的索引儘量不加,,最好不超過字段數的20%
重複率高的字段不要加索引
舉例:不要給“性別”列創建索引
不在索引列進行數學運算或函數運算
無法使用索引
導致權標掃描
自增列或全局ID做INNODB主鍵
忌用字符串做主鍵
推薦用獨立與業務的AUTO_INCREMENT列或全局ID生成器做主鍵代理
儘量不用外鍵,由程序保證約束
拒絕大SQL,拆解成多條簡單SQL
一條SQL只能在一個CPU運算
可能一條大SQL就能把數據庫堵死
簡單SQL緩存命中率更高
用上多CPU
減少鎖表時間,特別是MyISAM
儘可能少用存儲過程
儘可能少用觸發器
減少使用MySQL函數對結果進行處理,由客戶端程序負責
儘量不用SELECT *,只取需要的數據列
爲使用覆蓋索引提高可能性
同一字段,將OR改寫爲IN()
OR效率:O(n)
IN效率:O(Log n)
當n很大時,OR會慢很多
注意控制IN的個數,建議n小於200。
將OR改寫爲UNION
減少對不同字段進行"OR"查詢
合併索引往往很“弱智”
如果有足夠信心:set global optimizer_switch='index_merge=off';
舉例:SELECT * FROM user WHERE phone='010-88886666' OR mobile='13800138000';
改寫爲:
SELECT * FROM user WHERE phone='010-88886666'
UNION
SELECT * FROM user WHERE mobile='13800138000';
避免負向查詢:NOT、!=、<>、NOT EXISTS、NOT IN、NOT LIKE等
避免%前綴模糊查詢:使用不了索引、導致全表掃描
舉例:SELECT * FROM POST WHERE city LIKE '北京%'; YES
SELECT * FROM POST WHERE city LIKE '%北京%'; NO!!!
儘量少用COUNT(*),COUNT(*)的資源開銷快,用COUNT(主鍵)。
用UNION ALL 而非 UNION
若無需對結果進行去重,則用UNION ALL,UNION有去重開銷
高併發DB不建議進行兩個表以上的JOIN
GROUP BY 去除排序
GROUP的功能:分組與自動排序
無需排序:ORDER BY NULL
特定排序:GROUP BY xxx DESC/ASC
MySQL性能優化
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
震驚:蔡英文決定 為安倍「下半旗」,真的合理嗎?
SteveSapp9
2022-07-11 17:06:56
哪些因素会影响性欲?这些因素不容小觑
SteveSapp9
2022-07-04 20:32:20
台媒爆料“台版51區”興建“神秘”設施 “面積大到令人好奇”
SteveSapp9
2022-06-23 14:39:41
河北省公安廳發布關於陳某誌等涉嫌尋釁滋事、暴力毆打他人等案件偵辦進展情況的通報
LouisRodgers5773
2022-06-21 16:49:16
曼聯遇到障礙將克里斯蒂安·埃里克森帶到老特拉福德
ktn83
2022-06-18 07:55:27
如何提高性生活質量?這六個妙招快快學起來!
mugiseki2710
2022-06-17 15:34:42
UEFAチャンピオンズリーグ決勝戦、米で視聴者数が過去最高に
fikik75972
2022-06-16 23:48:20
wewerewrr werwerwer
pennyjhurd
2022-06-12 18:34:42
fds rew rewrewrewrew
mufajiqe
2022-06-12 18:04:40
Deep Lake Water Cooling System Market To Witness Huge Growth By 2030
chhidami.a.msg
2022-06-08 22:14:54
專家建議晚飯只吃七分飽,常見的胃病有哪些?
LouisRodgers5773
2022-06-08 15:16:23
肝臟不好怎麼調理?
LouisRodgers5773
2022-06-08 14:49:19
中国人民解放军的最高军事机关为中央机关为中央军事委员会
fikik75972
2022-06-08 00:31:46
台中叫/小/姐瀨tea232台中/外/約✔外拍麻豆✔校園系花✔專櫃正妹❤
lan520an109
2022-06-07 19:29:34