概要
- RubyActiveRecordを使う場合と使わない場合におけるベンチマークがWebを探しても無かったので測ってみました。
- 純粋な比較は難しいので、あくまでも参考値として見ていただければと思います。
- 比較
- activerecord (5.2.4.3)
- mysql2 (0.5.3)
実験
測定方法
- 純粋な比較が難しいので、とりあえず1行だけプライマリーキーで1行取得して変数に入れます。
- usersテーブルは67カラムあります。
- レコードのデータは、文字列に変換すると576バイトです。
- 実行環境: ruby 2.6.6p146, MySQL: 5.7.29
- on Docker on macos.
Activerecordの結果
6.6秒
pry(main)> puts Benchmark.measure { 10000.times { User.find(1) } } 3.223594 0.814001 4.037595 ( 6.624353)
mysql2の結果
3.5秒
pry(main)> puts Benchmark.measure { 10000.times { client.query('select * from users where id = 1').first } } 1.157955 0.410513 1.568468 ( 3.569280)
mysqlコマンドの結果
事前に1万行のクエリーを書いておいたファイルを実行してみました。
2.9秒
% time (cat select.sql | mysql -u root --password=$MYSQL_ROOT_PASSWORD test_database -h db > /dev/null) real 0m2.935s user 0m0.340s sys 0m0.529s
Comments