不要なデータベースランタイム処理

SQL ステートメントにはテーブルの完全修飾名(データベース名を含む名前)を使用します。

ステートメントの各テーブル名には常にデータベース名を明示的に指定します(メインデータベースの場合は「main」を使用します)。例えば、次のコードには、明示的なデータベース名 main が含まれます。

SELECT employeeId 
FROM main.employees

データベース名を明示的に指定すると、一致するテーブルを見つけるためにランタイムが各接続データベースをチェックする必要がなくなります。間違ったデータベースが選択される可能性もなくなります。SQLConnection が接続されているデータベースが 1 つしかない場合でもこのルールに従ってください。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 ステートメントで明示的な列ではなくワイルドカードを使用すると、余分なデータを取得する処理が発生します。この余計なデータには追加の処理が必要であり、必要ではない余計なオブジェクトインスタンスが作成されます。

テーブルをそれ自体と比較する場合を除き、1 つのステートメント内で同じテーブルの結合を複数回使用しないでください。

SQL ステートメントが長くなると、意図せずに 1 つのデータベーステーブルを複数回クエリに結合してしまうことがあります。そのようなステートメントを見直すと、当該テーブルを 1 回使用するだけで同じ結果を得られることが少なくありません。同じテーブルを複数回結合する操作は、ビューを 1 つまたは複数使用しているクエリで発生しがちです。例えば、テーブルをクエリに結合し、さらに、そのテーブルのデータが含まれるビューにも結合してしまうことがあります。この 2 つの操作により、複数の結合が発生することになります。