Skip to content

Commit 2dc22af

Browse files
perf(solidus_admin): Remove created_at order
The created_at column does not have an index and there will be a tmp table created to order the result set. This will cause a delay on huge data sets. Move the order statement into the search scopes to sort each scope individually. It is also faster to sort only one column instead of two. Only the scopes that are filtering already completed orders will sort by completed_at. This change reduced the loading time of 8M orders from 18sec to 836ms.
1 parent 192ff25 commit 2dc22af

1 file changed

Lines changed: 6 additions & 6 deletions

File tree

admin/app/controllers/solidus_admin/orders_controller.rb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ class OrdersController < SolidusAdmin::BaseController
55
include Spree::Core::ControllerHelpers::StrongParameters
66
include SolidusAdmin::ControllerHelpers::Search
77

8-
search_scope(:completed, default: true) { _1.complete }
9-
search_scope(:canceled) { _1.canceled }
10-
search_scope(:returned) { _1.with_state(:returned) }
11-
search_scope(:in_progress) { _1.with_state([:cart] + _1.checkout_step_names) }
12-
search_scope(:all) { _1 }
8+
search_scope(:completed, default: true) { _1.complete.order(completed_at: :desc) }
9+
search_scope(:canceled) { _1.canceled.order(completed_at: :desc) }
10+
search_scope(:returned) { _1.with_state(:returned).order(completed_at: :desc) }
11+
search_scope(:in_progress) { _1.with_state([:cart] + _1.checkout_step_names).order(id: :desc) }
12+
search_scope(:all) { _1.order(id: :desc) }
1313

1414
def index
1515
orders = apply_search_to(
16-
Spree::Order.order(created_at: :desc, id: :desc),
16+
Spree::Order,
1717
param: :q,
1818
distinct: false
1919
)

0 commit comments

Comments
 (0)