SQL速度改善のために

「STRUCTURE QUERY LANGUAGE」と書かれた紙 PHP

こんにちは。ぽこです。

今回は、PHPを使ったSQLの速度改善のための方法をいくつか紹介します。

速度計測

まずは、PHPで速度計測を行います。

$time_start = microtime(true);

// 計測したい処理(SQL実行処理)

$time = microtime(true) - $time_start;
echo "{$time} 秒"; //ログなどに出力してもよい

ここで出力される時間が、処理にかかった時間となります。

IN句内の副問い合わせをなくす

修正前

副問い合わせを行うと、処理時間がかかるため、分割します。

SELECT 列名1, 列名2, ...
FROM テーブルa
WHERE 列名 IN (
    SELECT 列名
    FROM テーブルb
    [WHERE 条件式など]
)

上記のようなSQLを純粋に次の2つに分けて実行します。

修正後

SELECT 列名
FROM テーブルb
[WHERE 条件式など]

ここで一度実行し、その結果を使って次のSQLを実行します。

SELECT 列名1, 列名2, ...
FROM テーブルa
WHERE 列名 IN (実行結果)

joinを分ける

修正前

joinには時間がかかってしまうため、それを分けるか、結合前に条件を指定します。

SELECT
  a.列名1,
  a.列名2 
FROM 
  テーブルa
INNER JOIN
  テーブルb
ON 
  a.列名1 = b.列名1 -- 結合条件
WHERE
 条件式など

修正後

SELECT 列名1 
FROM テーブルb
[WHERE 条件式など]

ここで一度実行し、その結果を使って次のSQLを実行します。

SELECT
  a.列名1,
  a.列名2 
FROM 
  テーブルa
WHERE
 実行結果(存在確認)
タイトルとURLをコピーしました