高效率的 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 陳述式與效能的詳細資訊。