2

単純な SELECT クエリを実行して保存した PHP Web サービスを使用しています。

$result = run_query($get_query);

ここで、さまざまなパラメーターに基づいてデータに対してさらにクエリを実行する必要があります。これは、MySQL を介して次の形式で実行できることがわかっています。

SELECT * 
FROM (SELECT *
      FROM customers
      WHERE CompanyName > 'g')
WHERE ContactName < 'g'

これにより、テーブルに対して 2 つの Select クエリが実行されることはわかっています。ただし、私が知りたいのは、次のように、以前に保存したクエリを 2 番目のセクションの FROM セクションで単純に使用できるかどうか、およびデータベース全体を再度クエリしないことでパフォーマンスが向上するという私の信念が正しいかどうかです。

SELECT * 
FROM ($result)
WHERE ContactName < 'g'
4

5 に答える 5

1

一時テーブルを作成して最初の結果を入れ、それを使用してデータを選択し、2 番目のクエリで使用できます。これは、最初のクエリが遅い場合にのみ高速に機能します。

于 2013-03-26T16:22:42.653 に答える
1

PHP と SQL は異なる言語であり、プラットフォームも大きく異なります。多くの場合、それらは同じコンピューターで実行されることさえありません。PHP 変数は、MySQL サーバーとまったくやり取りしません。PHP を使用して、たまたま SQL コードを含む文字列を作成しますが、それだけです。最終的に重要なのは、サーバーに送信した SQL コードだけです。それをどのように生成したかは問題ではありません。

さらに、説明計画を取得しない限り、MySQL がどのようにクエリを実行するかを実際に言うことはできません。

EXPLAIN EXTENDED
SELECT * 
FROM (SELECT *
      FROM customers
      WHERE CompanyName > 'g')
WHERE ContactName < 'g'

...しかし、クエリに対してテーブルを2回読み取るとは思えません。メモリはディスクよりもはるかに高速です。

于 2013-03-26T16:26:34.113 に答える
1

回答ありがとうございます。私が探していたのは、PHP で直接サポートされていない「クエリのクエリ」であることがわかりましたが、機能を提供する関数をここで見つけました: http://www.tom-muck.com/blog/index .cfm?newsid=37

それは、この他の SO の質問から見つかりました: Can php query the results from a previous query?

速度が向上するかどうかを判断するには、まだ比較を行う必要があります。

于 2013-03-26T18:23:13.403 に答える
0

私があなたの質問を正しく理解していれば、SQL クエリの「from」部分を php 変数に保存すると、SQL サーバーへのクエリのパフォーマンスが向上するかどうかを知りたいと思います。答えは NO です。値を保持する変数がクエリに挿入されるためです。

PHP でパフォーマンスが向上するかどうかにかかわらず、答えはおそらく「はい」です。ただし、パフォーマンスが注目に値するかどうかは、変数値の長さ (および、新しい完全なクエリを作成する代わりに変数を使用して繰り返す頻度) によって異なります。

于 2013-03-26T16:16:19.977 に答える
0

このような単一のクエリでこのデータを取得しないのはなぜですか?

SELECT * 
FROM customers
WHERE CompanyName > 'g'
AND ContactName < 'g'
于 2013-03-26T16:20:47.277 に答える