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