Skip to content

Latest commit

 

History

History
43 lines (33 loc) · 1.45 KB

2023-05-09-optimise-cart-cleanup.md

File metadata and controls

43 lines (33 loc) · 1.45 KB
title date area tags
Optimize cart cleanup
2023-05-09
core
performance

Optimize cart cleanup

::: info This document represents an architecture decision record (ADR) and has been mirrored from the ADR section in our Shopware 6 repository. You can find the original version here :::

Context

The existing SQL snippet to delete the outdated cart entries doesn't use any database index to narrow down entries that can be deleted. On high traffic shops this leads to SQL query times larger than 30 seconds to find and remove these database entries.

Running

EXPLAIN DELETE FROM cart
WHERE (updated_at IS NULL AND created_at <= '2023-02-01')
   OR (updated_at IS NOT NULL AND updated_at <= '2023-02-01') LIMIT 1000;

shows that the original sql query doesn't use an index (possible_keys = NULL)

Decision

Reorder the query parameters so that the relevant cart entries can be narrowed down by an indexed field.

Testing the new SQL snippet by running

EXPLAIN DELETE FROM cart
        WHERE created_at <= '2023-02-01'
          AND (updated_at IS NULL OR updated_at <= '2023-02-01') LIMIT 1000;

shows that the new query uses an index (possible_keys = idx.cart.created_at).

Consequences

The logic stays the same but the amount of time needed to find the record drops dramatically, so the change results in a better performance during cart cleanup.