不懂業務的 DBA 只能做表面調優。熟悉業務流程、數據流向、核心查詢模式,才能在規範化與性能間做正確取捨。
OrderDetail)適度冗余常用維度字段(投遞員、收款員、物品、價格策略、客戶信息),避免百萬級大表連接 5+ 維表,查詢從小時級降至秒級。以空間換時間,前提是保證邏輯一致性(觸發器/ETL 同步冗余列)。BLOB/CLOB 而非巨大 VARCHAR,LOB 存指針,數據可外置,減緩表膨脹。INT/BIGINT),比較/連接/索引效率遠高於字符型。GROUP BY/ORDER BY 高頻列建索引,利用索引順序避免排序。COMPOUND INDEX),列順序遵循「等值優先、範圍其次、排序最後」。能用索引順序輸出時避免排序。不可避免時:縮小排序列、限制排序行數(FETCH FIRST)、避免 DISTINCT(產生工作表+排序)。
字符主鍵比較開銷大,大數據量下差異顯著。
相關子查詢每行外層掃描一次內層,開銷指數級。改寫為 JOIN 或 EXISTS,優化器更易生成哈希/合併連接計劃。
LIKE 'M%' 可走索引;LIKE '%M%' 或 LIKE 'M___' 導致全表掃描。改用範圍查詢:WHERE col >= 'M' AND col < 'N'。
產生臨時表+排序+去重,開銷大。業務允許時用 GROUP BY 或應用層去重。
!=、<>、NOT IN、NOT EXISTS 多導致全表掃描。改用正向邏輯或 LEFT JOIN ... WHERE right.key IS NULL。
磁盤臨時表 I/O 重、分布式環境下同步成本高。優先用 WITH (CTE)、內聯視圖、派生表在內存完成中間結果。
復雜邏輯封裝為 SP,首次編譯生成優化計劃緩存,後續調用省去解析/優化開銷,減少網絡往返。配合 Query Patroller 對比計劃代價,Performance Monitor 監控 I/O/排序/鎖等待。
性能優化是系統工程:設計定上限、查詢定下限、並發定穩定性。引入 RUNSTATS 自動化、REORG 定期整理、EXPLAIN 計劃審查機制,建立「開發自審→DBA 複核→上線觀測」閉環,才能持續應對數據增長帶來的挑戰。