0

PHP-MySQLを使用してシステムを構築しました。このシステムは非常に大きな負荷にさらされており、毎分何千もの選択、更新、挿入、削除が行われます。

このシステムを最適化し、高速化し、サーバーの負荷を軽減したいと思います。すでにmemcacheを導入しましたが、mysqlデータはまだ必要です。

だから私の質問は、この場合、どちらの方法が最適かということです。現在、私のクエリは次のようになります。

$q = mysql_query($sql);
while(mysql_fetch_array($q)) {...

mysql_fetch_assoc(?)を使用することで得られる速度が少しあることを読みました。

しかし、私がこのシステムの最適化を開始するとき、おそらくまったく異なるアプローチがありますか?

みなさん、ありがとうございました-(英語のスキルが限られていることをお詫びします)

4

3 に答える 3

1

結果セットを制限するには、mysql キーワード LIMIT を使用することをお勧めします。

結果セットを返す mysql にページネーションを追加すると、アプリケーションが軽くなり、フェッチする行が少なくなるため、UI の読み込みが速くなり、mysql サーバーは必要なときに選択クエリのみを受信します。基本的には limit の使い方の構文です。

SELECT * FROM Person LIMIT X,Y

ここで、X は取得する合計行数、Y はオフセットです。

例:

SELECT * FROM Person LIMIT 10, 0

このクエリは、テーブル Person の最初の 10 行を返します。

SELECT * FROM Person LIMIT 10, 10

次の10件を表示します

于 2012-10-01T19:47:24.710 に答える
1

mysql_fetch_assocvsmysql_fetch_arrayは複製するデータが少ないため、使用するメモリが少なくなります。データは連想的indexに配列で表示されるため、データセットが大きい場合に役立ちますが、これにより、いくつかの小さな最適化が得られます。

  • natural可能であれば、並べ替え (別名、クエリ文で SORT を避ける) とLIMIT結果セットを使用してみてください
  • バッチ クエリ: 代わりに、同じテーブルに対して 100 回の挿入を実行し、そのうちのいくつかを小規模に実行してみてください。
  • 可能な場合は、キャッシュ キャッシュをキャッシュします: redis または memcached を使用します。
  • 静的として扱うことができるページを生成する場合は、HTTP ヘッダーを使用して、ブラウザーが常にサイトを要求するのを回避してください。
  • などなど
于 2012-10-01T18:12:53.597 に答える