2010-12-13 10 views
2

非常に大きなユーザーテーブルのSELECT * FROM user LIMIT 5などのクエリのパフォーマンスが心配です。すべてのレコードを選択して5に制限しますか?LIMITはいつ適用されますか?制限する前にすべての結果を選択しますか?

は、具体的には次のクエリは、制限する前に、すべてのassetidsを選択します...

SELECT * FROM assets WHERE asset_id IN(1,2,3,4,5,6,7,8,9,10) LIMIT 5 

私はそれは私が制限していた場合IN()句のすべてのIDを含めることには意味がありませんが、私は思います実現この状況でmysqlがどのように動作するか知りたいのです。

ありがとうございました。

答えて

1

これはクエリによって異なります。 LIMITが適用されるかのより多くの説明については、このページを参照してください: http://dev.mysql.com/doc/refman/5.0/en/limit-optimization.html

その特定のクエリについては、以下が適用されます: 「とすぐにMySQLはそれがない限り、クエリを中止し、クライアントに行の必要数を送信したとして、 SQL_CALC_FOUND_ROWSを使用しています。

希望に役立ちます。

0

クエリはすべての行をasset_id列でスキャンする必要があります。そのため、インデックスを追加することをお勧めします。私の経験では、結果セットは内部的に(つまり、不明な順序で)返され、返された5つの結果が実際に必要な結果であった理由はわからないので、常にorder by句を設定したいと考えています。

+0

"クエリをスキャンする必要があります" - 本当ですか? – zerkms

関連する問題