私はこれをやろうとしています:
<?php
$good_customer = 0;
$q = mysql_query("SELECT user FROM users WHERE activated = '1'"); // this gives me about 40k users
while($r = mysql_fetch_assoc($q)){
$money_spent = 0;
$user = $r['user'];
// Do queries on another 20 tables
for($i = 1; $i<=20 ; $i++){
$tbl_name = 'data' . $i;
$q2 = mysql_query("SELECT money_spent FROM $tbl_name WHERE user = '{$user}'");
while($r2 = mysql_fetch_assoc($q2)){
$money_spend += $r2['money_spent'];
}
if($money_spend > 1000000){
$good_customer += 1;
}
}
}
これはほんの一例です。シングルユーザーのローカルホストでテストしていますが、非常に高速に戻ります。しかし、私が 1000 を試してみると、40,000 人のユーザーについても言及されていなくても、永遠にかかります。
とにかく、このコードを最適化/改善するには?
編集:ちなみに、他の20のテーブルにはそれぞれ〜20〜40kのレコードがあります
EDIT2:
さて、「お金を使う」という考えを捨ててください。これは私の現在の構造です:
ユーザーテーブル => ユーザーは PK
logs_week_1 テーブル => ユーザーは FK です。
logs_week_2 テーブル => ユーザーは外部キー
logs_week_3 テーブル => ユーザーは外部キー
... 将来的にはより多くのログ テーブルが作成される予定です。
各ログテーブルに保存されている、サイトでの「平均時間」を見つけたいです。
つまり、ログを毎週保存するのは悪い考えだとおっしゃいましたか? 1 つのテーブルにマージする必要がありますか?