4

MySQL でデータを処理するか、PHP や Python のようなサーバー言語でデータを処理する方が速いか疑問に思っていました。ORDER のようなネイティブ関数は、インデックス作成、キャッシュなどにより MySQL でより高速になると確信していますが、実際にはランクを計算します (複数のエントリを同じランクとして返すタイを含む)。

サンプル SQL

SELECT TORCH_ID,
    distance AS thisscore,
    (SELECT COUNT(distinct(distance))+1 FROM torch_info WHERE distance > thisscore) AS rank
    FROM torch_info ORDER BY rank

サーバ

SELECT TORCH_ID FROM torch_info ORDER BY score DESC...単に a を実行してから、Web サーバー上の PHP のランクを把握するのとは対照的です。

4

6 に答える 6

2

MySQL は、ほとんどの複雑でない計算でおそらく高速になります。ただし、時間の 90% はデータベース サーバーがボトルネックであるため、これらの計算でデータベースを停止させて、さらにボトルネックを増やしたいと思いますか? 私自身は、負荷を均等にするためにそれらをWeb/アプリケーションサーバーに配置したいと思いますが、それはあなたの決定です.

于 2009-06-05T18:25:57.257 に答える
2

一般に、「データをデータベースで処理するか、Web サーバーで処理する必要があるか」という質問に対する答えは、「場合による」です。

  1. 別の Web サーバーを追加するのは簡単です。別のデータベース サーバーを追加するのは困難です。データベースの負荷を軽減できれば、それで十分です。
  2. データ処理の出力が必要な入力よりもはるかに小さい場合、データベースで処理を行うことにより、大量のデータ転送オーバーヘッドを回避できる場合があります。SELECT *簡単な例として、テーブル内のすべての行を取得し、それらを Web サーバー上で反復処理して x = 3 の行を選択するのは愚かなことです。SELECT * WHERE x = 3
  3. ご指摘のとおり、データベースは、インデックスなどを使用して、データの操作用に最適化されています。
于 2009-06-05T20:42:21.527 に答える
1

カウントの速度は、使用している DB ストレージ エンジンとテーブルのサイズによって異なります。mySQL で行われるほぼすべてのカウントとランクは、同じデータを PHP メモリにプルして同じ操作を行うよりも高速であると思います。

于 2009-06-05T18:08:49.343 に答える
0

質問の大部分は、設定した主キーとインデックスに依存しています。torchID が適切にインデックス化されていると仮定すると...

mySQL はサーバー側のコードよりも高速であることがわかります。

もう 1 つの考慮事項は、この SQL が呼び出される頻度です。ランク列を作成し、各トラック レコードが入るたびに更新する方が簡単な場合があります。これにより、データベースへの「より重い」ヒットが多数発生するのに対して、データベースへの多数のマイナー ヒットが発生します。

たとえば、10,000 件のレコードがあり、このクエリを 1 日に 1 回ヒットするユーザーが 1000 人、毎日新しい実績を記録するユーザーが 100 人いるとします。DB で 100 回の更新を行い、そのうちの 10% がすべてのレコード (9,999) にヒットし、ランキング クエリが 1 日 1,000 回ヒットするようにしたいと考えています。

私の2セント。

于 2009-06-05T18:48:36.777 に答える
0

ランキングは、カウント、順序に基づいています。したがって、これらの機能をより高速に実行できれば、ランクは明らかに高速になります。

于 2009-06-05T18:23:04.453 に答える
0

テストでトランザクションをポストする代わりに個々のクエリを実行する場合は、ODBC dsn よりも JDBC ドライバーを使用することをお勧めします。これは、パフォーマンスが 2 ~ 3 倍高速になるためです。(テストでここで odbc dsn を使用すると仮定します)

于 2009-06-05T19:01:10.763 に答える