2

多くの列を持つテーブルに対するいくつかのクエリで、次のことに気づきました。

SELECT column1, column2 FROM ...

それは私がするときのほぼ2倍の速さである可能性があります:

SELECT * FROM ... # ~ 15 columns

*クエリを返すのにかかる追加の時間の原因は何ですか?私は当初、両方のクエリが同じ行を取得している場合、パフォーマンスの違いは些細なことだと思っていました。この違いの原因は何ですか?

4

3 に答える 3

7

行数は同じですが、追加の列をクライアントに転送する必要があり、ネットワーク帯域幅を消費します。ファイルのダウンロードに7倍の時間がかかるのと同じ理由で、追加の時間が必要になります。また、ディスクからブロックを読み取る必要がある場合もありますが、それ以外の場合は必要ない場合があり、場合によっては、インデックスからのみ読み取るだけではクエリを完了できないこともあります。そのため、選択リストは常に明示的に指定することをお勧めします。

于 2012-06-11T05:45:41.257 に答える
2

最初に行うことは、「プランの説明」を調べて、一方のクエリがもう一方のクエリプランとは異なるクエリプランになるかどうかを確認することです。

http://dev.mysql.com/doc/refman/5.5/en/execution-plan-information.html

于 2012-06-11T05:37:19.620 に答える
0

与えられた...

  1. SELECT column1, column2 FROM yourtable
  2. SELECT * FROM yourtable

MySQLのパフォーマンスは、たとえば、複数の要因によって変更される可能性があります

  • データをクライアントに送り返し、
  • アイテムを解放し、
  • テーブルをロックし、
  • クエリキャッシュをチェックし、
  • 結果をクエリキャッシュに保存し、
  • 最適化、
  • テーブルの開閉

...そしてさらにいくつか。どちらの方法が速いかを判断するときは、これらすべての要素を考慮に入れる必要があります。

ほとんどの場合、必要な列のみをクエリするため、アプリケーションとデータベースサーバー間の不要な転送負荷が軽減されます。しかし...認める必要があります。列が数列しかない場合や、何かをテストしたい場合は、SELECT *-ショートカットを使用することもあります。

于 2012-06-11T06:01:02.393 に答える