優(yōu)化思路
詳細(xì)的MySQL優(yōu)化步驟如下:
- 檢查數(shù)據(jù)表結(jié)構(gòu),改善不完善設(shè)計(jì)
- 跑一遍主要業(yè)務(wù),收集常用的數(shù)據(jù)庫(kù)查詢SQL
- 分析查詢SQL,適當(dāng)拆分,添加索引等優(yōu)化查詢
- 優(yōu)化SQL的同時(shí),優(yōu)化代碼邏輯
- 添加本地緩存和redis緩存
盡可能不要使用NULL值
因?yàn)榻ū淼臅r(shí)候,如果不對(duì)創(chuàng)建的值設(shè)置默認(rèn)值,MySQL都會(huì)設(shè)置默認(rèn)為NULL
。那么為啥用NULL
不好呢?
NULL
使得索引維護(hù)更加復(fù)雜,強(qiáng)烈建議對(duì)索引列設(shè)置NOT NULL
NOT IN
、!=
等負(fù)向條件查詢?cè)谟?code>NULL值的情況下返回永遠(yuǎn)為空結(jié)果,查詢?nèi)菀壮鲥e(cuò)NULL
列需要一個(gè)額外字節(jié)作為判斷是否為NULL
的標(biāo)志位- 使用
NULL
時(shí)和該列其他的值可能不是同種類型,導(dǎo)致問(wèn)題。(在不同的語(yǔ)言中表現(xiàn)不一樣) - MySQL難以優(yōu)化對(duì)可為
NULL
的列的查詢
所以對(duì)于那些以前偷懶的字段,手動(dòng)設(shè)置一個(gè)默認(rèn)值吧,空字符串呀,0呀補(bǔ)上。
雖然這種方法對(duì)于MySQL的性能來(lái)說(shuō)沒有提升多少,但是這是一個(gè)好習(xí)慣,而且以小見大,不要忽略這些細(xì)節(jié)。
添加索引
對(duì)于經(jīng)常查詢的字段,請(qǐng)加上索引,有索引和沒有索引的查詢速度相差十倍甚至