テーブル用の統計情報を作成しようとしましたが、3百万行以上の行があるため、実際には遅いです。GROUP BYとORDER BYが遅すぎます。もっと速くするには?
私は列name
の最も一般的な値を見つけようとしています。また、何回ポップアップしたかを示しています。
私はmommentでこれを使用していますが、動作が遅すぎるため、エラーが発生します。
$total = mysql_query("SELECT `name`, COUNT(*) as b FROM `people` GROUP BY `name` ORDER BY `b` DESC LIMIT 0,5;")or die(mysql_error());
あなたは私がすべての名前を取得しようと何回名前が使用されていることだけうまくいけば、それをスピードアップするために、トップ5を表示しています見ているよう。
私はその後、
while($row = mysql_fetch_array($result)){
echo $row['name'].': '.$row['b']."\r\n";
}
のような値を得るのですかできるようにしたいと思いますそして、それはこのようなものが表示されます。
Bob: 215
Steve: 120
Sophie: 118
RandomGuy: 50
RandomGirl: 50
私は間違った方法でラウンドして、その後RandomGirlとRandomGuyのような名前の発注についてはあまり気にしません。
私は十分な情報を提供していると思います。 :)可能であれば、名前の大文字小文字を区別しないようにしたいと思います。 BobはBoB、bOb、BOBなどと同じでなければなりません。
お礼のお時間 ポール
データベースの 'name'にインデックスがありますか?それは我々が逃している重要な情報であり、最も可能性の高い最適化です... –
EXPLAINの出力とCREATE TABLEステートメントを追加してください。 –
wonk0
'EXPLAIN SELECT ...'を実行する習慣を身につけ、あなたの質問のテーブルのDDLと一緒にそれの出力を含めて。これは、MySQLが何をしているか、どのような改善が見られるのかをあなた(そして私たち)に伝えます。詳細はhttp://dev.mysql.com/doc/refman/5.0/en/explain.htmlを参照してください。 –