WHERE
句内のサブクエリではなく、(
FROM
句で)
JOIN
を使用して、クエリにテーブルを含めます。結果セットではなくフィルター処理のためにのみテーブルのデータが必要な場合でも、このヒントは適用されます。
FROM
句で複数のテーブルを結合すると、
WHERE
句でサブクエリを使用するよりもパフォーマンスが向上します。
インデックスを利用できない SQL ステートメントは避けます。これには、サブクエリで集計関数を使用するステートメント、サブクエリの
UNION
ステートメント、また、
UNION
ステートメントを使用した
ORDER BY
句などが該当します。
インデックスによって
SELECT
クエリの処理速度は大幅に向上する可能性があります。ただし、一部の SQL 構文では、データベースにインデックスを使用できず、検索操作またはソート操作に実際のデータを使用する必要があります。
LIKE
演算子の使用は避けます。特に、
LIKE('%XXXX%')
のように先頭をワイルドカード文字にすることは避けてください。
LIKE
演算はワイルドカード検索の使用をサポートしているので、完全一致の比較を使用する演算子に比べると低速です。特に、検索ストリングの先頭をワイルドカード文字で開始すると、検索時にインデックスを使用できません。その場合、データベースは、テーブルの各行を全文検索する必要があります。
IN
演算子の使用を避けます。有効な値を事前に把握している場合は、
IN
演算を
AND
または
OR
を使用して作成すると、実行が速くなります。
次の 2 つのステートメントでは、2 番目のステートメントのほうが高速に実行されます。高速な理由は、
IN()
または
NOT IN()
ステートメントを使用するのではなく、単純な等価式と
OR
を組み合わせて使用しているからです。
-- 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 ステートメントとパフォーマンスについて詳しく学習できます。
|
|
|