diff --git a/app/logical/explain_parser.rb b/app/logical/explain_parser.rb index c9346b456..2afc6f57f 100644 --- a/app/logical/explain_parser.rb +++ b/app/logical/explain_parser.rb @@ -1,5 +1,10 @@ -class ExplainParser < Struct.new(:sql) +class ExplainParser extend Memoist + attr_reader :relation + + def initialize(relation) + @relation = relation + end def query_plan result = ApplicationRecord.connection.select_one("EXPLAIN (FORMAT JSON) #{sql}") @@ -11,5 +16,9 @@ class ExplainParser < Struct.new(:sql) query_plan["Plan Rows"] end + def sql + relation.reorder(nil).to_sql + end + memoize :query_plan end diff --git a/app/logical/post_query_builder.rb b/app/logical/post_query_builder.rb index f84506a1e..5c0b5f5e1 100644 --- a/app/logical/post_query_builder.rb +++ b/app/logical/post_query_builder.rb @@ -851,7 +851,7 @@ class PostQueryBuilder end def estimated_row_count - ExplainParser.new(build.to_sql).row_count + ExplainParser.new(build).row_count end def cached_count