2011-08-13 12 views
0

私はこの最初に手を経験してきましたが、私はいくつかのGoogle検索後に被写体にすべてのリソースを見つけるに苦労しています:MYSQL:なぜSELECT [明示的な列名]はSELECTよりも高速である*

SELECT * FROM Table LIMIT x 

この理由は何

SELECT id, name, email, address, phone, sex, date, ip FROM Table LIMIT x 

:明示的に特定のテーブルの列名のすべてをリストより遅い復帰時間を持っていますか?

+1

これ以上の作業が必要です。最初に列名を検索する必要があります。しかし、正直言って、これはテーブルのための一定の違いでなければならないので、あなたはそれについてあまり心配するべきではありません。 (もちろん、あなたが実際に必要とするものだけをリストしてください。) –

+3

あなたの質問から、2つのステートメントをほぼ同時に実行しようとしているかどうかは不明です。ほとんどのデータベースシステムではデータがキャッシュされるので、2番目のステートメントは最初のステートメントのためにメモリ内でまだデータが利用できるというメリットがあります。 –

+1

すべてのテーブル列をリストするのは、2番目のケースか必要なものだけですか? – elevener

答えて

1

あなたがselect * RDBMS(あなたと仮定すると、明示的にすなわちすべてカラム名を、選択され、テーブルには列だけのID、名前、電子メール、住所、電話番号、性別、日付、IPが含まれています) *を列名に展開し、選択後の単語を実行する必要があります。列名を明示的に指定すると、必要なステップは必要ありません。

+1

しかし、名前をリストするとき、DBMSはそれらがすべて有効であることをチェックする必要があります。したがって、 '' * ''と入力するのと基本的に同じ働きをします。 –

+0

もちろん、正確ですが、MySQLの方が一般的なRDBMSより大きいヒット数を示しているようです。 MySQLと他のRDBMSとの間でこれはなぜ非効率的ですか? –

+0

Re:Jonathan Leffler、それは理にかなっていますが、何らかの理由でオンラインのどこかで、列名を明示的にリストする方が速いことを読んだとき(投稿の理由:そのリソースを今見つけることができません)テーブルから[明示的、すべて、列、名前、代わりに、of、*]を選択すると、データベース接続の迅速性が大幅に向上したことがわかりました。 [すなわち、各データベースの接続が速く完了しました]それは私の質問です。 –

1

明示的に列挙された列を持つSELECTを使用する文の方がSELECT *より高速です。実際には、表の列の一部のみを実際にリストするときに意味があります。たとえば、複数の長いVARCHARまたはTEXTフィールドを含むテーブルのIDのみが必要な場合は、1つの列を取得するだけで多くの時間と帯域幅を節約できます。

+0

これは私がこの問題を投稿した理由です。 MySQLは実際に*と明示的な列名がなくても、実際には列の数を減らしているかどうかに関係なく、問合せを高速に戻すためです。 –

+0

つまり、YESを指定すると、必要な列のみをフェッチするとクエリがはるかに高速になりますが、FACT IS MySQLは結果をすべて明示的な列名VS * * iamkrillinの回答明白な問題ですが、私の質問は、明示的な列名のすべてをより高速にmysqlでより単純な "select *"よりも高速にクエリすることです。 –

関連する問題