1

2つのテーブル、同じ構造、同じ行、同じデータがありますが、最初のテーブルにはより多くの列(フィールド)があります。

例えば:

両方から同じ3つのフィールドを選択します(SELECT a、b、c FROM mytable1、次にSELECT a、b、c FROM mytable2)

(テーブルごとに)100,000レコードでこれらのクエリを実行しようとしましたが、最終的に同じ実行時間(0.0006秒)が得られました。列の数(そして最終的には1つのテーブルのサイズ)かどうかわかりますか他よりも大きい)クエリの実行時間で何かをする必要がありますか?

4

4 に答える 4

1

論理的には実行時間に影響し、列が多いテーブルのデータが大きい場合は違いが見られる可能性があります。元。Table1:500mb、Table2:40mb。特にデータセットインデックスがメモリに収まらなくなった場合、パフォーマンスが低下します。次に、ディスクパフォ​​ーマンスがステップインします。

于 2012-09-17T15:32:34.290 に答える
1

実行時間に影響しますが、列/行のサイズを直線的に増やすことによる影響はわずかだと思います。MySQLはまだ余分なデータを処理/表示する必要があるため、効果がゼロになる方法はありません。

(私の意見では)重要なポイントは、選択する必要のある列と行のみを選択することです。

于 2012-09-17T15:29:53.560 に答える
1

IMO。適切な列のみを選択すると、配信時間(データベースサーバーからアプリケーションサーバーへ)に影響し、より多くのデータを保存および転送する必要があるため、メモリに影響します。

于 2012-09-17T15:36:03.030 に答える
1

この例では、テーブルから同じ3つの列を選択しています。余分な列がある(ただし、それらを選択しない)ことがほとんど/まったく影響を与えない場合、私が考えることができるいくつかの方法があります。

  1. 選択しているすべての列がインデックスに含まれている場合、MySQLはディスクから基になる行を読み取る必要はありません。
  2. 新しい列がVARCHARの場合、ページサイズはほとんど変更されないと思います(VARCHARは実際にはポインターであるため)。
  3. 新しい列が小さい場合(たとえば、TINYINTは1バイトのみです)。

一般に、テーブルを狭くするとパフォーマンスが向上します。

例を試してみたい場合は、いくつかの大きなCHAR(VARCHARではない)を入れて、テストクエリでそれらの列を選択し直してください。それはもっと悪いことだと思います。

お役に立てば幸いです。

于 2012-09-17T15:42:06.470 に答える