針對千萬級資料量查詢優化,從索引設計、SQL 改寫、架構調整到日常維護,系統整理 30 多條實戰優化原則。
IS NULL 導致索引失效,改用預設值 0 查詢 =0UNION ALL 分開查詢合併BETWEEN 替代FORCE INDEX 或動態 SQLnum/2=100 → num=200SUBSTRING(name,1,3)='abc' → name LIKE 'abc%'SELECT ... WHERE 1=0 改用 CREATE TABLE ... LIKEEXISTS (SELECT 1 FROM b WHERE b.num=a.num)VARCHAR 替代 CHAR:節省空間、縮小掃描範圍SELECT *:明確列出需要欄位SELECT INTO,小量用 CREATE + INSERTTRUNCATE 後 DROPFAST_FORWARD 游標SET NOCOUNT ON 減少網路往返ANALYZE TABLE 更新統計資訊,修正執行計畫偏差ANALYZE TABLE tbl_name:分析關鍵字分布,鎖定讀取CHECK TABLE tbl_name [QUICK|FAST|MEDIUM|EXTENDED|CHANGED]:檢查錯誤,更新統計OPTIMIZE TABLE tbl_name:整理碎片、回收空間 (MyISAM/InnoDB/BDB)注意:上述三指令執行期間鎖表,請在低峰期執行。
ORDER BY/GROUP BY 受益於索引IN/OR 產生工作表導致索引失效,拆分子句並保留索引欄位MEDIUMINT 代替 INTNOT NULL,NULL 明確指定VARCHAR/TEXT/BLOBENUM