コンソールでクエリ(MyModel.where(...)
またはまたはrecord.associated_things
)を実行すると、実行中の実際のデータベースクエリを確認して、何が起こっているのかをより詳しく理解できますか?
コンソールでクエリ(MyModel.where(...)
またはまたはrecord.associated_things
)を実行すると、実行中の実際のデータベースクエリを確認して、何が起こっているのかをより詳しく理解できますか?
回答:
コンソールに次の行を入力します。
ActiveRecord::Base.logger = Logger.new(STDOUT)
コンソールに次の行を入力します。
ActiveRecord::Base.connection.instance_variable_set :@logger, Logger.new(STDOUT)
ActiveRecord::Base.logger = nil
.explain
Rails 4にはメソッドがあります
(.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
.explain
仕事をやる意志を見つけるのにとても時間がかかりました.to_sql
。また.explain
、pgコンソールで実行できるraw形式のSQLクエリはまだ提供されていません。しかし、説明と分析には生のクエリが必要でした。私は今のところ説明に関係していると思います。
最近から、これを使用できます:
https://github.com/dejan/rails_panel
これは、Chrome用の開発者コンソールパネルアドオンと、次のようにアプリケーションのGemfileに追加する必要があるgemファイルで構成されています。
group :development do
gem 'meta_request'
end
次に、もう一度実行します。
bundle install
Rails 6以降、より便利なアプローチがActiveRecord::Base.verbose_query_logs = true
あります。コンソールに追加するだけで、すべてのSQL呼び出しとそれが呼び出された場所が表示されます。詳細https://guides.rubyonrails.org/debugging_rails_applications.html#verbose-query-logs