0

これらの方法の1つが最も効率的であるジレンマのIm。

複数のテーブルを結合し、数千のレコードをクエリするクエリがあるとします。それよりも、これらすべての結果を通じて合計をページ付けする必要があります。

速いですか?

1)完全な選択(50の列を選択する必要があると仮定)を実行し、行をカウントしてから、制限付きで別のクエリを実行しますか?(MySQLキャッシュは、この場合、カウントに使用される最初のクエリで必要なすべての列をすでに選択するのに役立ちますか?)

2)最初にCOUNT関数を使用してクエリを実行し、次にクエリを実行して必要な結果を選択します。

3)MySQL COUNT関数を使用する代わりに、たとえばIDを選択するクエリを実行し、PHP関数mysql_num_rowsを使用しますか?

  • COUNT関数に組み込まれたMySQLを使用する場合は、2番が最適なオプションだと思いますが、MySQLがキャッシュを使用することはわかっているので、最初のクエリですべての結果を選択する方が速くなりますか?

ありがとう、

4

2 に答える 2

1

Found_Rows()を見てください。

SELECTステートメントにはLIMIT、サーバーがクライアントに返す行数を制限する句を含めることができます。場合によっては、ステートメントを再実行せずに、LIMIT なしでステートメントが返す行数を知ることが望ましい場合があります。この行数を取得するSQL_CALC_FOUND_ROWSには、ステートメントにオプションを含め、後でSELECT 呼び出し ます。2 番目の SELECT は、最初の SELECT` が LIMIT 句なしで記述されていた場合に返される行数を示す数値を返します。FOUND_ROWS()

mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE id > 100 LIMIT 10;
mysql> SELECT FOUND_ROWS();

于 2012-07-17T23:14:22.617 に答える
0

私の推測では 2 番ですが、実際にはデータ サイズ、テーブル、インデックス、MySql のバージョンなどに完全に依存します。

これに対する答えを見つける唯一の方法は、それぞれを試して、どれくらいかかるかを測定することです. しかし、私が言うように、私の予感は 2 番です。

于 2012-07-17T23:13:34.193 に答える