INSERT@MySQL:続・カラム名を指定したほうが速いのか、指定しないほうが速いのか

前回までのあらすじ

INSERT文にカラム名を指定したものと指定していないもの、どちらが速いか測定した。

例:
  INS1(1-1): INSERT INTO table1 (col1, col2) VALUES ("AAA", "BBB");
  INS2(1-2): INSERT INTO table1 VALUES ("AAA", "BBB");


その結果、なんとカラム名を指定しないほうが速いという結果が得られた。
http://d.hatena.ne.jp/sakaik/20081007/mysql_insert_column


 しかし、ここで もの言いが!
 「2番目のSQLは (col1, col2) のぶんだけバイト数が小さい。mysqlサーバに送られる時間か、mysqlサーバ内でパースする際にこのサイズの差が有利に働いているのではないか?」


 どうなる? INS 2!!


測定

 以下のとおり INS2改として、カラム名コメントアウトした状態のものを用意する。INS1, INS2, INS2改それぞれについて再度測定を行った。(それぞれ 1-1, 1-2, 1-2' と称する)。今回の測定は InnoDB のみ行った。
 これでバイト数に関する条件は(ほぼ)同じである。むしろ INS2改のほうが長いくらい。

INS1:例:  INSERT INTO ai1 (id, col1) VALUES (4, 'HP0_Yfmyf');
INS2:例:  INSERT INTO ai1 VALUES (3, 'L342T7Tp0KNAYP7OXty1SPQuISHnk');
INS2改:例: INSERT INTO ai1 /*(id, col1)*/ VALUES (3, 'r3tY45AXte2SGQuIRp4');

結果

InnoDB

感想

  • まぁ、コメントしてバイト数かせいでもまったくコメントしなくても(1-2 と 1-2')変わりがないと思ってよさそうだ
  • 結論としてやはり「カラム名を指定しないほうが速い」ということになろう。

裏話

  • 実は前回測定した 1-1, 1-2 と、今回測定した 1-2' を比較したら、傾向の見えない不思議なものになってしまった(今回の 1-2' が一番速い)。
  • 改めて 1-1, 1-2, 1-2' のセットで測定することで今回の結果を得た。
  • 一連の測定での数秒の差は、ちょっとした環境(OS周りで他の処理が一瞬走った等)の違いによって現れるのであろう程度の差であると実感した。
  • しかしまとめて(数時間内)に一緒に測定すれば、その測定点のひとつひとつが誤差でぶれるのではなく一定の傾向を見せてくれる。