怎麼避免寫出慢SQL

在大多數實際的系統中,慢 SQL 消耗掉的資料庫資源,往往是正常 SQL 的幾倍、幾十倍甚至幾百倍。

怎樣才能在開發階段盡量避免寫出慢 SQL 呢?

估算數據量

慢 SQL 對資料庫的影響,是一個量變到質變的過程,對「量」的把握,就很重要。編寫一條查詢語句的時候,可以依據你要查詢數據表的數據總量,估算一下這條查詢大致需要遍歷多少行數據。

使用索引

使用索引可以有效地減少執行查詢時遍曆數據的行數,提高查詢性能。在每次開發新功能,需要給資料庫增加一個新的查詢時,都要評估一下,是不是有索引可以支撐新的查詢語句,如果有必要的話,需要新建索引來支援新增的查詢。但是,增加索引付出的代價是,會降低數據插入、刪除和更新的性能。增加了索引,在數據變化的時候,不僅要變更數據表裡的數據,還要去變更每個索引。所以,對於更新頻繁並且對更新性能要求較高的表,可以盡量少建索引。而對於查詢較多更新較少的表,可以根據查詢的業務邏輯,適當多建一些索引。

分析 SQL 執行計劃

在你的 SQL 語句前面加上 EXPLAIN 關鍵字,然後執行這個查詢語句就可以了。
對於複雜的查詢,最好使用 SQL 執行計劃,事先對查詢做一個分析。在 SQL 執行計劃的結果中,可以看到查詢預估的遍歷行數,命中了哪些索引。執行計劃也可以很好地幫助你優化你的查詢語句。例如:
EXPLAIN select * from auth_permission where name like ‘Can add%’;
在這裡插入圖片描述

EXPLAIN select * from auth_permission where left(name,7) = ‘Can add』;
在這裡插入圖片描述

優化SQL

優化SQL,提升查詢效率。對於添加的索引列考慮是否會實效的導致全表掃描的情況。

使用慢查詢日誌分析

MySQL 慢查詢日誌是排查問題 SQL 語句,以及檢查當前 MySQL 性能的一個重要功能

Mysql開啟慢查詢日誌