不必要的数据库运行时处理

在 SQL 语句中使用完全限定的表名称(包括数据库名称)。

始终在语句中显式指定数据库名称和每个表名称。(如果是主数据库,请使用“main”)。例如,以下代码包括一个显式数据库名称 main

SELECT employeeId 
FROM main.employees

如果显式指定数据库名称,运行时就不必检查每个数据库才能找到匹配表。这样做还消除了使运行时选择错误数据库的可能性。即使 SQLConnection 仅连接到单个数据库,也要遵循此规则。在后台,SQLConnection 还连接到可通过 SQL 语句访问的临时数据库。

在 SQL INSERT SELECT 语句中使用显式列名称。

下列示例介绍如何使用显式列名称:

INSERT INTO main.employees (firstName, lastName, salary) 
VALUES ("Bob", "Jones", 2000) 
     
SELECT employeeId, lastName, firstName, salary 
FROM main.employees

将上述示例与下列示例进行比较。避免使用这种类型的代码:

-- bad because column names aren't specified 
INSERT INTO main.employees 
VALUES ("Bob", "Jones", 2000) 
     
-- bad because it uses a wildcard 
SELECT * 
FROM main.employees

如果没有显式列名称,运行时必须执行额外操作才能找到列名称。如果 SELECT 语句使用通配符(而不是显式列),将导致运行时检索额外数据。此额外数据需要额外处理并将创建不需要的额外对象实例。

除非将该表与其本身进行比较,否则避免在一个语句中多次连接同一个表。

随着 SQL 语句不断增大,您会无意中将数据库表多次连接到查询。通常,使用该表一次即可实现相同结果。如果在一个查询中使用一个或多个视图,很有可能多次连接同一表。例如,您可能将表连接到查询,也可能连接到一个包含该表中的数据的视图。这两种操作都可能导致多次连接。