こんにちは。ぽこです。
今回は、PHPを使ったSQLの速度改善のための方法をいくつか紹介します。
速度計測
まずは、PHPで速度計測を行います。
1 2 3 4 5 6 |
$time_start = microtime(true); // 計測したい処理(SQL実行処理) $time = microtime(true) - $time_start; echo "{$time} 秒"; //ログなどに出力してもよい |
ここで出力される時間が、処理にかかった時間となります。
IN句内の副問い合わせをなくす
修正前
副問い合わせを行うと、処理時間がかかるため、分割します。
1 2 3 4 5 6 7 |
SELECT 列名1, 列名2, ... FROM テーブルa WHERE 列名 IN ( SELECT 列名 FROM テーブルb [WHERE 条件式など] ) |
上記のようなSQLを純粋に次の2つに分けて実行します。
修正後
1 2 3 |
SELECT 列名 FROM テーブルb [WHERE 条件式など] |
ここで一度実行し、その結果を使って次のSQLを実行します。
1 2 3 |
SELECT 列名1, 列名2, ... FROM テーブルa WHERE 列名 IN (実行結果) |
joinを分ける
修正前
joinには時間がかかってしまうため、それを分けるか、結合前に条件を指定します。
1 2 3 4 5 6 7 8 9 10 11 |
SELECT a.列名1, a.列名2 FROM テーブルa INNER JOIN テーブルb ON a.列名1 = b.列名1 -- 結合条件 WHERE 条件式など |
修正後
1 2 3 |
SELECT 列名1 FROM テーブルb [WHERE 条件式など] |
ここで一度実行し、その結果を使って次のSQLを実行します。
1 2 3 4 5 6 7 |
SELECT a.列名1, a.列名2 FROM テーブルa WHERE 実行結果(存在確認) |