如何調(diào)優(yōu)MySQL
首先:選擇最合適的字段屬性迁杨。
MySQL在創(chuàng)建數(shù)據(jù)庫時(shí),數(shù)據(jù)庫中的表越小越好凄硼,從而提高查詢速度铅协。然而,現(xiàn)實(shí)往往不盡人意摊沉。每天可能產(chǎn)生的數(shù)據(jù)量在數(shù)萬或數(shù)十萬狐史。此時(shí),在創(chuàng)建表時(shí)應(yīng)充分考慮字段長度说墨。例如骏全,在存儲(chǔ)電話號碼時(shí),如果將其寫為char(255)尼斧,顯然會(huì)給數(shù)據(jù)庫帶來大量不必要的空間浪費(fèi)姜贡。Char(11)可以解決這個(gè)問題。
第二:使用連接而不是子查詢棺棵。
子查詢的優(yōu)點(diǎn)是可以使用簡單的選擇語句來完成具有復(fù)雜邏輯的查詢操作楼咳,并且可以避免死鎖。但有時(shí)您也可以考慮使用連接查詢來完成它烛恤。畢竟母怜,join查詢不需要像子查詢那樣在內(nèi)存中創(chuàng)建一個(gè)臨時(shí)表,然后從臨時(shí)表中過濾數(shù)據(jù)缚柏,從而加快查詢速度苹熏。
https://pan.baidu.com/s/1d22iuAit2eKZt_gJbmBWnw?pwd=wqhj?
提取碼: wqhj?
第三:使用聯(lián)合查詢。
Union有Union的意思。它可以將多個(gè)選擇語句的查詢結(jié)果組合成一個(gè)查詢柜裸,取代手動(dòng)創(chuàng)建臨時(shí)表的過程缕陕。此外粱锐,union還有另一個(gè)優(yōu)點(diǎn)疙挺,即在使用后自動(dòng)刪除,完全不占用內(nèi)存空間怜浅。這是真正的“當(dāng)事情結(jié)束铐然,刷你的衣服,不要碰你的身體”恶座。
第四:通過交易進(jìn)行管理搀暑。
事務(wù)在數(shù)據(jù)庫調(diào)優(yōu)中是一個(gè)古老的概念。事務(wù)由于其四個(gè)特點(diǎn)跨琳,是不可避免的調(diào)優(yōu)方法之一自点,它可以保證數(shù)據(jù)的完整性和一致性÷鋈茫可以用一句話來概括:“走不到盡頭桂敛,就回到原點(diǎn)〗η保”
第五:鎖好表术唬。
事務(wù)處理雖然可以保證數(shù)據(jù)庫的完整性和一致性,但也存在一些不足滚澜。用戶只能等待事務(wù)本身完成粗仓,因?yàn)槠渌胁僮鞫伎梢岳^續(xù),直到事務(wù)被發(fā)出设捐。如果用戶訪問的次數(shù)特別大借浊,會(huì)造成系統(tǒng)嚴(yán)重的延遲。
因此萝招,鎖表的方法可以確保所有被locktable修改過的查詢語句在執(zhí)行unlocktables指令之前不會(huì)被插入蚂斤、刪除和修改。
第六:合理使用外鍵即寒。
外鍵的作用是確保表之間的引用完整性橡淆。使用外鍵可以有效地增加數(shù)據(jù)之間的相關(guān)性。
第七:正確使用索引母赵。
索引是提高數(shù)據(jù)庫性能最常用的方法逸爵。正確使用索引可以大大提高查詢效率。
但是凹嘲,不可能為所有列創(chuàng)建索引师倔,因?yàn)檫@會(huì)占用內(nèi)存,而且維護(hù)起來很麻煩周蹭。它是一把雙刃劍趋艘,所以需要根據(jù)實(shí)際情況正確使用索引疲恢。
第八:優(yōu)化查詢語句。
一個(gè)好的查詢語句可以明顯提高查詢效率瓷胧,否則就會(huì)慢到懷疑程序是否寫錯(cuò)了显拳。
那么什么樣的查詢語句是好的呢?請參考以下要求
1. 在進(jìn)行比較時(shí),盡量在相同的字段之間進(jìn)行比較搓萧。例如杂数,帶索引的int字段不能與bigint字段進(jìn)行比較。
2. 不要在已索引的字段上使用函數(shù)瘸洛,因?yàn)檫@會(huì)使索引無效揍移。
3.在查詢時(shí)不鼓勵(lì)使用like語句,因?yàn)樗鼘⑾南到y(tǒng)的部分性能