MySQLを扱っていて、SELECT文でSQLを発行する場合、カラム(フィールド)を全部取得した方が速いのか、一部取得の方が速いのかベンチマークを取ってみました。
結論から言うと、一部取得の方が速いです。
発行するSQL
一部取得 : ”SELECT state FROM table1″
全部取得 : ”SELECT * FROM table1″
一部のカラムを抽出(state)
平均値: 0.023152 [sec]
全測定結果:
Array
(
[1] => 0.006020
[2] => 0.005948
[3] => 0.006169
[4] => 0.029970
[5] => 0.025944
[6] => 0.006965
[7] => 0.006757
[8] => 0.005894
[9] => 0.005891
[10] => 0.131971
[mean] => 0.023152
[iterations] => 10
)
全部のカラムを抽出 (*)
平均値: 0.128534 [sec]
全測定結果:
Array
(
[1] => 0.025478
[2] => 0.161143
[3] => 0.135521
[4] => 0.175835
[5] => 0.104871
[6] => 0.125868
[7] => 0.138533
[8] => 0.125199
[9] => 0.141315
[10] => 0.151584
[mean] => 0.128534
[iterations] => 10
)
ちなみに使用したベンチマーカーは、PEAR::Benchmark_Iterateです。
更に、もう一つ結果を。下で、使用したベンチマーカーは、PEAR::Benchmark_Timerです。
| ex time | % | |
| Start | – | 0.00% |
| 全部のカラム抽出(*) | 0.035709 | 81.70% |
| 一部のカラム抽出(state) | 0.007989 | 18.28% |
| Stop | 0.000009 | 0.02% |
| total | 0.043707 | 100.00% |
どれくらい速度に差が出るかは、データベースのカラムの構成などにもよりますが、一つのカラムをたくさんのカラムから抽出する場合には、特定のカラムを指定してSELECTした方が速いようです。