2014年9月1日月曜日

rails4のActiveRecordで特定のカラムだけ取得する

ActiveRecordで普通にfindしたりすると、すべてのカラムが取得できますが、
DBの負荷を考えると必要なカラムだけ取得したいので、そのやり方を調べました。

まずはrailsのバージョンを確認
$ bundle exec rails -v
Rails 4.1.4

DBの中身はこんな感じです。
mysql> select * from sometest3s where id=2;
+----+------+--------------------------------------------------------------------------------------------+----------+---------------------+
| id | name | content                                                                                    | view_flg | ins_date            |
+----+------+--------------------------------------------------------------------------------------------+----------+---------------------+
|  2 | john | {"shop_id"=>[100, 200, 300], "item_id"=>[500, 600, 700, 800], "name"=>"jon", "user"=>2000} | 0        | 2014-08-20 02:17:17 |
+----+------+--------------------------------------------------------------------------------------------+----------+---------------------+
1 row in set (0.00 sec)

取得の仕方はこうで、pluckを使うと結果は配列に入ります。
mapss = Sometest3.select(:id,:name).where(:id => 2).pluck(:id,:name)
puts mapss # => 2 john
puts mapss[0] # => 2 john
puts mapss[0][0] # => 2
puts mapss[0][1] # => john 

その際に発行されるSQLがこんな感じです。
   (0.3ms)  SELECT `sometest3s`.`id`, `sometest3s`.`name` FROM `sometest3s`  WHERE `sometest3s`.`id` = 2

ちなみにwhereとselectを入れ替えてみても発行されるSQLは同じでした。
mapss = Sometest3.where(:id => 2).select(:id,:name).pluck(:id,:name)

   (0.3ms)  SELECT `sometest3s`.`id`, `sometest3s`.`name` FROM `sometest3s`  WHERE `sometest3s`.`id` = 2


参考URL
http://6rats.blog62.fc2.com/blog-entry-75.html
http://d.hatena.ne.jp/suginoy/20120605/p3

0 件のコメント:

コメントを投稿