1. 程式人生 > >怎麼避免寫出慢SQL

怎麼避免寫出慢SQL

在大多數實際的系統中,慢 SQL 消耗掉的資料庫資源,往往是正常 SQL 的幾倍、幾十倍甚至幾百倍。 怎樣才能在開發階段儘量避免寫出慢 SQL 呢? ### 估算資料量 慢 SQL 對資料庫的影響,是一個量變到質變的過程,對“量”的把握,就很重要。編寫一條查詢語句的時候,可以依據你要查詢資料表的資料總量,估算一下這條查詢大致需要遍歷多少行資料。 ### 使用索引 使用索引可以有效地減少執行查詢時遍歷資料的行數,提高查詢效能。在每次開發新功能,需要給資料庫增加一個新的查詢時,都要評估一下,是不是有索引可以支撐新的查詢語句,如果有必要的話,需要新建索引來支援新增的查詢。但是,增加索引付出的代價是,會降低資料插入、刪除和更新的效能。增加了索引,在資料變化的時候,不僅要變更資料表裡的資料,還要去變更每個索引。所以,對於更新頻繁並且對更新效能要求較高的表,可以儘量少建索引。而對於查詢較多更新較少的表,可以根據查詢的業務邏輯,適當多建一些索引。 ### 分析 SQL 執行計劃 在你的 SQL 語句前面加上 EXPLAIN 關鍵字,然後執行這個查詢語句就可以了。 對於複雜的查詢,最好使用 SQL 執行計劃,事先對查詢做一個分析。在 SQL 執行計劃的結果中,可以看到查詢預估的遍歷行數,命中了哪些索引。執行計劃也可以很好地幫助你優化你的查詢語句。例如: EXPLAIN select * from auth_permission where name like 'Can add%'; ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200503181012432.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMjM5NTIw,size_16,color_FFFFFF,t_70) EXPLAIN select * from auth_permission where left(name,7) = 'Can add’; ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200503181000997.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMjM5NTIw,size_16,color_FFFFFF,t_70) ### 優化SQL 優化SQL,提升查詢效率。對於新增的索引列考慮是否會實效的導致全表掃描的情況。 ### 使用慢查詢日誌分析 MySQL 慢查詢日誌是排查問題 SQL 語句,以及檢查當前 MySQL 效能的一個重要功能 [Mysql開啟慢查詢日誌](https://www.cnblogs.com/magic-chenyang/p/10557002.html)