2016-05-18 9 views
0

は、私の知る限りはそれを知っているように、彼らは両方の行と列の同じ数を返すMySQLのSELECT *最適化

1. SELECT * FROM data;  -- 45000 rows 
2. SELECT data.* FROM data; -- 45000 rows 

SHOW PROFILES; 
+----------+------------+-------------------------+ 
| Query_ID | Duration | Query     | 
+----------+------------+-------------------------+ 
|  1 | 0.10902800 | SELECT * FROM data  | 
|  2 | 0.11139200 | SELECT data.* FROM data | 
+----------+------------+-------------------------+ 
2 rows in set, 1 warning (0.00 sec) 

の間で大きな違いがある理由があります。なぜ期間の格差?大きな違いはありません

MySQL version 5.6.29

+3

0.002秒は "巨大"ではありません。この違いはおそらくサーバー上の他のアクティビティーによるものです。 –

+2

最初のクエリを2回実行しても、時間が異なることがあります。 – Stivan

+2

@ GordonLinoff公正であるためには、それは2%の違いです。しかし、私は彼がそれらを何度か繰り返した場合、時には1つが速いことがわかるでしょう。しかし、彼はまた、クエリキャッシュを無効にする必要があります。 – Barmar

答えて

2

。どちらも最適化されていません。どちらもフル・テーブル・スキャンを行います。どちらもオプティマイザと同じ構文解析を行います。あなたは、ミリ秒の差の話をしています。

テーブルスキャン全体を最適化することはできません。問題は "を選択"または "データを選択"ではありません。問題は、どこに句がないということです。なぜなら、最適化が始まるからです。

1

指定された特定の例は、同じ結果を返し、同じパフォーマンスを持ちます。 [TableName]。[column]は、通常、結合または複合文の中に2つのテーブルがあり、同じ名前を持つ2つのテーブルの中から使用するカラムを定義する場合に使用するテーブルを特定するために使用されます。

これはもっとも一般的な使用方法ですが、上記のような基本的なステートメントには違いはなく、出力も同じです。