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した方が速いようです。