次のクエリがあります。
SELECT p2c.pid AS productNumber,
p.name AS productName
, (
SELECT COUNT(*)
FROM products2customers
WHERE pid = p2c.pid
) AS registered
, (
SELECT COUNT(*)
FROM products2customers
WHERE pid = p2c.pid
AND date_add(from_unixtime(purchased), INTERVAL 5 YEAR) >= CURDATE()
) AS inWarranty
, (
SELECT COUNT(*)
FROM products2customers
WHERE pid = p2c.pid
AND date_add(from_unixtime(purchased), INTERVAL 5 YEAR) < CURDATE()
) AS outOfWarranty
, (
SELECT DATE_FORMAT( MAX( from_unixtime(purchased) ), '%d.%m.%Y')
FROM products2customers
WHERE pid = p2c.pid
) AS lastPurchased
, (
SELECT DATE_FORMAT( date_add( MAX( from_unixtime(purchased) ), INTERVAL 5 YEAR), '%d.%m.%Y')
FROM products2customers
WHERE pid = p2c.pid
) AS warrantyUntil
FROM (
SELECT DISTINCT
p2c.pid
FROM
products2customers p2c
) AS p2c
JOIN
products p
ON
p.id = p2c.pid
ORDER BY
inWarranty DESC
クエリは、25.000 行のデータベース テーブルで実行されます。このクエリの実行時間は約 40 秒です。結果はウェブページに表示されるので、結果が出るまで 40 秒も待つのはあまり良くありません。
このクエリを実行して出力を保存する方法はありますか? このクエリを毎晩実行すれば十分だからです。
これを行うための最良の方法は何ですか? cronjob を作成してこのクエリを実行し、結果をデータベースに書き込む必要がありますか? それとももっと良い方法がありますか?
または、このクエリを最適化して高速化できますか?