高效率的 SQL 語法

使用 JOIN (在 FROM 子句中) 在查詢中納入資料表,而不是在 WHERE 子句的子查詢中。即使您只需要篩選資料表的資料 (而不需要取得結果集),也可使用此祕訣。

FROM 子句中加入多個資料表會比在 WHERE 子句中使用子查詢來得快。

請避免無法充分利用索引的 SQL 陳述式。這些陳述式包括使用子查詢中的彙總函數、子查詢中的 UNION 陳述式,或是搭配 UNION 陳述式的 ORDER BY 子句。

索引可大幅提升處理 SELECT 查詢的速度。不過,有些 SQL 語法會阻止資料庫使用索引,強制資料庫使用實際資料來進行搜尋或排序作業。

請考慮避免使用 LIKE 運算子,尤其是前置萬用字元,如 LIKE('%XXXX%')

因為 LIKE 作業支援使用萬用字元進行搜尋,所以執行速度會比使用完全比對的比較方式來得慢。特別是,如果您的搜尋字串是以萬用字元開頭,資料庫在搜尋中將完全無法使用索引。資料庫必須改為搜尋資料表中每列的全文。

請考慮避免使用 IN 運算子。如果預先知道可能的值,可以使用 AND OR 來撰寫 IN 作業,讓執行更快速。

在下列兩個陳述式中,第二個的執行速度較快。執行速度較快的原因是,該陳述式結合 OR 來使用簡單的相等運算式,而不是使用 IN() NOT IN() 陳述式:

-- Slower 
SELECT lastName, firstName, salary 
FROM main.employees 
WHERE salary IN (2000, 2500) 
     
-- Faster 
SELECT lastName, firstName, salary 
FROM main.employees 
WHERE salary = 2000 
    OR salary = 2500
請考慮改用 SQL 陳述式的替代格式來提升效能。

如先前的範例所示,SQL 陳述式的撰寫方式也會影響資料庫效能。通常您可以使用多種方式來撰寫 SQL SELECT 陳述式以擷取特定結果集。在某些情況下,某種方法的執行速度會明顯快於另一種方法。除了前述建議之外,您可以從 SQL 語言專屬的資源來瞭解不同 SQL 陳述式與效能的詳細資訊。