6

私はこれらのどれがクエリするのが(パフォーマンス的に)速いのだろうかと思っていました(これが重要な場合はMySQL 5.x CentOS 5.xで):

SELECT * FROM table_name WHERE id=1;
SELECT * FROM table_name WHERE id=2;
.
.
.
SELECT * FROM table_name WHERE id=50;

また...

SELECT * FROM table_name WHERE id IN (1,2,...,50);

idクエリするのに約50秒あります。私は通常、DB接続が高価であることを知っていますが、このIN句は[時々]それほど速くないこともわかりました。

4

5 に答える 5

5

2番目のオプションで最高のパフォーマンスが得られると確信しています。1つのクエリ、1つの結果。問題が発生する前に、100を超えるアイテムを探し始める必要があります。

ここから受け入れられた回答も参照してください:(大きい?)数の値に対するMySQL「IN」オペレーターのパフォーマンス

于 2012-05-13T13:12:09.277 に答える
3

私見あなたはそれを試して応答時間を測定する必要があります:INあなたにより良いパフォーマンスを与えるはずです...
とにかくあなたのIDが連続しているならあなたは試すことができます

SELECT * FROM table_name WHERE id BETWEEN 1 AND 50
于 2012-05-13T13:12:11.417 に答える
0

これは、ORとINの使用のパフォーマンスについて説明している別の投稿です。 SQLWHERE句のINとOR

複数のクエリを使用することを提案しましたが、ORを使用しても機能します。

于 2012-05-13T13:14:41.953 に答える
0

クエリが解釈されるとき、およびクエリを送信して結果を待つためにmysqlとのphp通信中にリソースが消費されるため、2番目の方が高速になります。データがシーケンシャルである場合は、次のことも実行できます。

   SELECT * FROM table_name WHERE id <= 50;
于 2012-05-13T13:30:25.990 に答える
0

IN句で3000以上の値を試した後、これを調査していました。SELECTで参照されている列にINキーが設定されていないため、個々のsよりも高速であることが判明しました。私の推測では、3000回ではなく、1回だけその列の一時インデックスを作成する必要がありました。

于 2012-05-30T15:21:43.450 に答える