一條 SQL 執行很慢的原因
分兩種情況,
- 大多數時候正常,偶爾很慢。
原因可能是,MySQL 后台線程在刷臟頁。 - 一直很慢。
原因可能是,沒用索引,或者加了索引,但索引失效,
又或者 MySQL 優化器選錯索引,可以使用 use index 來指定索引
那如何優化 MySQL 呢?
從表、索引、SQL 和參數四個維度來優化。

表優化
- 首先,盡量選擇小的數據類型,處理更快。
- 其次,要適當增加冗余字段,減少多表查詢,以空間換時間。
- 最后,如果單表數據量過大,就要考慮分庫分表
索引優化
- 首先,要擅用,比如為經常作為查詢條件的字段創建索引,為不重復的字段創建唯一索引。
- 其次,不能濫用,像性別這樣唯一性很差的字段,就不適合創建索引。
- 最后,可以適當使用覆蓋索引和前綴索引。覆蓋索引能減少回表次數,
前綴索引用子串作為索引,能節省空間,但是就用不上覆蓋索引。
SQL 優化
- 首先,可通過慢查詢日志發現需要優化的 SQL 語句,然后使用 Explain 分析語句的執行計划。
- 其次,要盡量避免使用 select *,而是指定具體的字段。
- 最后,MySQL 優化器可能選錯索引,可以使用 use index 來指定索引
參數優化
可以增大 redo log buffer 的大小,來減少寫回磁盤的 IO 操作。
