Quest Central (現屬 Dell/Quest) 的 SQL Tuning 模組是圖形化自動 SQL 優化利器,支援 Oracle/DB2/SQL Server 跨平台管理。本文以 SQL Server 為例演示全流程,核心邏輯對 Oracle 同樣適用。
Quest Central → Database 樹選 SQL Server → Tools 選 SQL Tuning → New Connection → 輸入實例/認證 → Connect
「Original SQL」文本框貼入待優化語句 → 選擇目標資料庫 → Execute → 工具自動解析執行計劃、統計信息、成本估算
點擊 Optimize Statement → 引擎基於規則/成本/語義等價變換生成候選方案 (如示例產生 19 條)
點擊 Compare Scenarios:
SELECT dbo.Person_BasicInfo.*,
dbo.Graduater_GraduaterRegist.RegistNO AS RegistNO,
...
CASE WHEN dbo.Graduater_Business.ComeFrom = 'WS' THEN '網上登記'
WHEN dbo.Graduater_Business.ComeFrom = 'HP' THEN '華普大廈'
...
END AS ComeFromName,
...
FROM dbo.Person_BasicInfo
INNER JOIN dbo.Graduater_Business ON ...
LEFT OUTER JOIN dbo.Graduater_GraduaterRegist ON ...
INNER JOIN dbo.Person_Contact ON ...
INNER JOIN dbo.Person_Skill ON ...
INNER JOIN dbo.Person_EmployPurpose ON ...
OPTION (FORCE ORDER); -- 強制連接順序 Hint
最小化物理讀 (PIO) 與邏輯讀 (LIO),以最少訪問獲取最多目標行,生成最優執行計劃。
ALTER TABLE ... CACHE 或 KEEP POOL (10g+)| 版本 | 默認模式 | 特性 | 建議 |
|---|---|---|---|
| 10g 前 | CHOOSE | 有統計用 CBO,無統計用 RBO | 避免使用,易產生混合模式不穩定計劃 |
| 10g+ | ALL_ROWS | 最小化總資源,傾向全表掃描 | OLTP 改 FIRST_ROWS_n (n=1/10/100) 傾向索引掃描 |
關鍵:統計信息缺失時 CBO 會動態採樣估算,導致嚴重誤判。DBA 首要動作:檢查並修正優化器模式與統計信息完整性。
V$SQLAREA 按 EXECUTIONS/BUFFER_GETS/DISK_READS/CPU_SECS 排序EXPLAIN PLAN + PLAN_TABLE (utlxplan.sql) → CONNECT BY PRIOR 顯示樹狀結構FIRST_ROWS_10, ORDERED, OPT_PARAM)WITH 重寫複雜子查詢MINUS 替代 NOT IN/EXISTSROLLUP/CUBE) 單掃描多維聚合NOT EXISTS 改外連接 IS NULLNOT IN、HAVINGLIKE '%...' 前導通配DECODE/CASE 減少表訪問