1

私のウェブサイトの 1 つで、次のコードを使用して、IP がデータベースにあるかどうかを確認する単純な php/mysql 関数を作成しました。

$ip = $_SERVER['REMOTE_ADDR'];
$user = mysql_query("SELECT * FROM users WHERE ip = '$ip' ");
if(mysql_num_rows($user) == 0){
echo 'IP is not banned';
}

昨日、このファイルには約 1,700,000 ヒット (ページビュー) があり、Im は共有ホスティングで、今後このファイルは約 3,000,000 回ロードされる可能性があります。

4

2 に答える 2

2

CPU 使用率に問題があるとは思いませんが、ユーザーが存在するかどうかを知る必要がある場合は、提案されているように制限 1 を追加してください。

これがテーブルがクエリされる主な方法である場合。ipまだインデックスがない場合は、列にインデックスを追加することを検討してください。そのクエリを実行するための CPU と読み取り操作が削減されます。

于 2013-01-19T10:49:07.143 に答える
1

@driis が言ったことは、一般的に次のように要約されます。しかし、それは間違いなくより多くの仕事です。

1 日 300 万件のクエリについて言及されました。@Rick Bradshaw の数値 (制限なしで 30 ミリ秒、制限ありで平均 15 ミリ秒) によると、DB 負荷は平均で約 1 になります。これは、このクエリのみが原因であり、これは重要です。

1 日 30ms*300 万 / 秒 = 1,04 (平均して、これはラッシュアワーでは良くない可能性があります)

15ms*3million / 1 日 = 0.52 (これも小さくありません)

この場合、システムで具体的な測定を行うことをお勧めします。さらに具体的な情報を知らなくても、列にインデックスを付けるのは良い考えに思えます。

于 2013-01-19T11:29:24.250 に答える