針對 Web 應用最高頻的 MySQL,本文匯總 21 條實戰優化法則,涵蓋 SQL 寫法、索引設計、架構選型、參數調優、運維習慣,助你系統化提升資料庫效能。
NOW()、RAND() 等非確定性函數導致緩存失效;改用應用層變數傳入固定值。type(目標 ref/range 以上)、rows(掃描行數)、Extra(Using index/Using where/Using temporary)。LIKE 'prefix%' 可用索引,LIKE '%suffix%' 需全文索引或外部搜尋引擎。SELECT * FROM tbl WHERE id >= (SELECT FLOOR(RAND() * MAX(id)) FROM tbl) LIMIT 1 或應用層隨機 ID。SELECT * FROM tbl PROCEDURE ANALYSE()。mysql_unbuffered_query() 邊讀邊處理,釋放 Server 端緩衝,但客戶端需自行管理記憶體。INET_ATON()/INET_NTOA() 或 PHP ip2long()/long2ip(),4 Byte 定長、範圍查詢極快。last_login、address)移至擴展表,避免主表緩存頻繁失效。DELETE ... LIMIT 1000; usleep(50000); 避免長鎖表導致連接堆積雪崩。SMALLINT/TINYINT;無時間精度需求用 DATE 代替 DATETIME。mysql_pconnect 易導致連接洩漏、記憶體耗盡、Max connections 打滿;短連接+連接池更可控。SQL Review Checklist,上線前必過 EXPLAIN、索引覆蓋、無 SELECT *、無 RAND()。slow_query_log + pt-query-digest 定期分析 Top 10 慢查詢。將這 21 條內化為團隊編碼規範,能從源頭消除 80% 以上的效能隱患。