2017-06-25 3 views
0

私は多くの列を含むテーブルを持っているので、私は自分のアプリケーションのすべての画面でこれらの列をすべて取得する必要はないので、必要な列に対してselect文を使用します。列数の増加が 'SELECT'文に影響しますか?

私の質問は、検索の手法です。データベースエンジンは、私が要求した列のみを処理するのですか、または他の列はクエリ実行のパフォーマンスで考慮されますか?

テーブルが100列ある場合は、SELECTの特定の列のみの場合、データベースエンジンはすべての列を選択したときと同じ時間をとりますか?

+0

これは実際には良い方法です。アプリケーションに必要な列のみを選択します。 –

答えて

1

基本的に2つの部分を考慮する必要があります。

まず、データがディスク上にどのように横たわっているかがわかります。 1つまたは複数の行を含むsmallest unit of data read generally is a page。列を追加すると、行あたりの記憶域が増えます。したがって、列数が多いレコードを取得するには、ストレージエンジンがより多くのページを読み取る必要があり、ディスクI/Oが増えます。

ただし、選択した列がインデックスに含まれている場合は、列のデータとしてrow data may not even have to be readをインデックスからフェッチできます。

次にキャッシュがあります。固定サイズのメモリキャッシュを使用すると、列が増えた場合には行が少なくなります。したがって、列を追加することで、キャッシュからデータを準備する準備が減ります。

2番目にネットワークトラフィックがあり、要求された列の影響を受けます。 SELECT *はすべての行データをネットワークパケットにパッケージ化する必要がありますが、特定の列を選択するとこれらの列のデータのみが転送されます。

1行あたりのネットワークトラフィックが多いということは、アプリケーションによってダウンロードされる1秒あたりの行数が少ないことを意味します。

したがって、短く:only select the columns you're going to needとし、該当する場合はインデックスに関連する列を含めることを検討してください。

+0

それでテーブルにも100列が含まれていると言っていますが、1つの列に対してspesific(またはSUMまたは任意の機能)をSELECTすると、検索エンジンはテーブルのようにクエリを処理します。テーブルには1つのクエリしか含まれていないか99が操作に影響しますか?) – XRushdy

関連する問題