0

計算にコストのかかるフィールドがいくつかあるデータベース ビューを作成したいと考えています。コストのかかるフィールドが不要な場合のコストを確認しようとしています。しかし、そうではなく、コストは同じであることがわかりました。

おもちゃの例として、ユーザー情報を含むテーブルがあります。このテーブルには、ID、名前、および名前が私のようなユーザーの数を返すビューがあります。

create view same_name as 
select  
       id,
       name,
       (select count(*) from users as u2 where u2.name = u1.name) as same_name_count,
       from users as u1;

現在、テーブルに対して 2 つのクエリを実行しています。最初の例ではすべてのフィールドを選択し、2 番目の例では単一のフィールド (名前) を選択しています。両方で、ID を制限します。

mysql> select * from same_name where id = 2;
+----+--------+-----------------+
| id | name   | same_name_count |
+----+--------+-----------------+
|  2 | meidan |             125 |
+----+--------+-----------------+
1 row in set (12.15 sec)

mysql> select name from same_name where id = 2;
+--------+
| name   |
+--------+
| meidan |
+--------+
1 row in set (12.15 sec)

したがって、パフォーマンスは同じであり、欠落しているフィールドでは最適化が行われていないことがわかります。これは予想される動作ですか?これに関するヒントはありますか?

ありがとう。

4

1 に答える 1

0

CPU サイクルのほとんどは、データ転送自体ではなく、行の選択と計算 (どちらの場合も同じ) に浪費されます。テーブルの各行がnameフィールド内の数バイトではなく数キロバイトのデータを占めていない場合、高速ネットワーク接続で大きな違いは見られません。

于 2013-07-10T18:41:55.553 に答える