私はnginx、fastcgi、mysqlの上にコードイグナイターフレームワーク上に構築されたWebアプリを持っています
ペイアウトテーブルがあります。テーブル構造はこちらです。
この表には、国名、perminutecost vsが保存され、56,373件近くのレコードが記録されています。
メインページには、ユーザーに携帯電話番号を入力して1分あたりの費用を取得するように求めるフォームがあります。ところで、ユーザーが入力するときにオートコンプリート機能を使用しています。
これが私のバックエンドコードです:
$ strはユーザー入力(携帯電話番号)を保持します
$ ret = true; $ count = 3;
while($ret){
$sub = substr($str,0,$count); //9053
$ret = R::getAll("SELECT Destination,PerMinuteCost FROM `payout` WHERE `Prefix` REGEXP '^$sub(.)*$' LIMIT 0 , 30");
$count++;
}
$sub = substr($str,0,$count-2);
$ret = R::getAll("SELECT Destination,PerMinuteCost FROM `payout` WHERE `Prefix` REGEXP '^$sub(.)*$' LIMIT 0 , 30");
return $ret[0];
このコードを使用すると、携帯電話番号から1分あたりのコストを取得できます(表には、すべての携帯電話番号ではなくプレフィックスのみが含まれています)
タイムアウト制限を拡張するためにnginxとfastcgiにいくつかの変更を加えました
しかし、同時にサービスを使用する人が多すぎると、mysqld cpuの使用率が100%を超えます。
このアルゴリズムをどのように改善できますか?
ありがとう。