SHOW FULL PROCESSLISTmysql -h localhost -u root -p
SHOW FULL PROCESSLIST;
重點觀察欄位:
Sending data、Locked、Copying to tmp table 等狀態提示瓶頸。EXPLAIN (或 DESC)| 欄位 | 關注重點 |
|---|---|
| type | 連接類型:system > const > eq_ref > ref > range > index > ALL,越左越好。 |
| possible_keys | 理論可用索引。 |
| key | 實際使用索引,NULL 表示全表掃描。 |
| rows | 預估掃描行數,越小越好。 |
| Extra | Using index(覆蓋索引)、Using where、Using filesort(需排序)、Using temporary(臨時表)。 |
SELECT * FROM imgs WHERE userid='admin' ORDER BY clicks DESC LIMIT 10;
type=ALL, key=NULL, rows=12506, Extra=Using where; Using filesort
CREATE INDEX idx_userid ON imgs(userid);
type=ref, key=idx_userid, rows=2944, Extra=Using where; Using filesort
CREATE INDEX idx_clicks ON imgs(clicks);
SELECT * FROM imgs USE INDEX (idx_clicks)
WHERE userid='admin' AND clicks > 10 ORDER BY clicks DESC LIMIT 10;
type=range, key=idx_clicks, rows=5455, Extra=Using where
雖 rows 仍大,但避免 filesort,實際執行時間大幅下降。若仍不足,可考慮聯合索引 (userid, clicks) 或覆蓋索引。
SELECT id, name FROM t WHERE id > 100 若索引含 (id, name) 即可 Using index。WHERE id > last_id ORDER BY id LIMIT n。innodb_buffer_pool_size 設為實體記憶體 60-80%、sort_buffer_size、join_buffer_size 視查詢複雜度調大。ANALYZE TABLE 更新統計資訊,確保優化器決策準確。