有效的 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 语句及其性能的更多信息。