MySQL是一個(gè)強(qiáng)大的開源數(shù)據(jù)庫。隨著MySQL上的應(yīng)用越來越多,MySQL逐漸遇到了瓶頸。這里提供一些關(guān)于Mysql 數(shù)據(jù)庫查詢優(yōu)化的24條優(yōu)化建議,僅供參考。
Mysql 查詢優(yōu)化
1、使用慢查詢?nèi)罩荆页鰣?zhí)行慢的查詢。
2、使用 EXPLAIN 來決定查詢功能是否合適。
3、經(jīng)常測(cè)試你的查詢,看是否需要做性能優(yōu)化
性能可能會(huì)隨著時(shí)間的變化而變化。
4、避免在整個(gè)表上使用count(*) ,它可能會(huì)將整個(gè)表鎖住。
5、保持查詢一致,這樣后續(xù)類似的查詢就能使用查詢緩存了。
6、如果合適,用 GROUP BY 代替 DISTINCT。
7、在 WHERE、GROUP BY 和 ORDER BY 的列上加上索引。
8、保證索引簡(jiǎn)單,不要在同一列上加多個(gè)索引。
9、有時(shí),MySQL 會(huì)選擇錯(cuò)誤的索引,這種情況使用 USE INDEX。
10、使用 SQL_MODE=STRICT 來檢查問題。
11、索引字段少于5個(gè)時(shí),UNION 操作用 LIMIT,而不是 OR。
12、使用 INSERT ON DUPLICATE KEY 或 INSERT IGNORE 來代替 UPDATE,避免 UPDATE 前需要先 SELECT。
13、使用索引字段和 ORDER BY 來代替 MAX。
14、避免使用 ORDER BY RAND()。
15、LIMIT M,N 在特定場(chǎng)景下會(huì)降低查詢效率,有節(jié)制使用。
16、使用 UNION 來代替 WHERE 子句中的子查詢。
17、對(duì) UPDATE 來說,使用 SHARE MODE 來防止排他鎖。
18、重啟 MySQL 時(shí),記得預(yù)熱數(shù)據(jù)庫,確保將數(shù)據(jù)加載到內(nèi)存,提高查詢效率。
19、使用 DROP TABLE ,然后再 CREATE TABLE ,而不是 DELETE FROM ,以刪除表中所有數(shù)據(jù)。
20、最小化你要查詢的數(shù)據(jù),只獲取你需要的數(shù)據(jù),通常來說不要使用 *。
21、考慮持久連接,而不是多次建立連接,已減少資源的消耗。
22、基準(zhǔn)查詢,包括服務(wù)器的負(fù)載,有時(shí)一個(gè)簡(jiǎn)單的查詢會(huì)影響其他的查詢。
23、當(dāng)服務(wù)器的負(fù)載增加時(shí),使用SHOW PROCESSLIST來查看慢的/有問題的查詢。
24、在存有生產(chǎn)環(huán)境數(shù)據(jù)副本的開發(fā)環(huán)境中,測(cè)試所有可疑的查詢。