当我在控制台中运行查询(例如MyModel.where(...)
或record.associated_things
)时,我如何才能看到正在运行的实际数据库查询,以便更好地了解发生了什么?
发布于 2010-05-30 01:44:30
Rails 3+
在控制台中输入以下行:
ActiveRecord::Base.logger = Logger.new(STDOUT)
Rails 2
在控制台中输入以下行:
ActiveRecord::Base.connection.instance_variable_set :@logger, Logger.new(STDOUT)
发布于 2014-12-18 13:59:34
在Rails 3+中,您可以使用ActiveRecord::Relation的to_sql
方法:
User.where(:id => 3).to_sql
#=> "SELECT \"users\".* FROM \"users\" WHERE \"users\".\"id\" = 3"
发布于 2016-02-01 21:24:41
在Rails 4中有.explain
方法。
(.to_sql
也可以,但不会显示包含)
Category.includes(:products).explain
=> EXPLAIN for: SELECT "categories".* FROM "categories" 0|0|0|SCAN TABLE categories
EXPLAIN for: SELECT "categories_products".* FROM "categories_products" WHERE "categories_products"."category_id" IN (1, 2) 0|0|0|SCAN TABLE categories_products
EXPLAIN for: SELECT "products".* FROM "products" WHERE "products"."id" IN (1, 2, 3, 4, 5, 6, 7) 0|0|0|SEARCH TABLE products USING INTEGER PRIMARY KEY (rowid=?) 0|0|0|EXECUTE LIST SUBQUERY 1
https://stackoverflow.com/questions/2936000
复制相似问题