Skip to content

Improve performance of /api/me/orders endpoint #5188

@alexsegura

Description

@alexsegura

This is the endpoint with the worst performance.
Looking at DataDog, it takes on average 10 seconds.

Image

Looking at the traces, the culprit are the queries performed by Doctrine to implement pagination.

SELECT DISTINCT s0_.id, s0_.created_at 
FROM 
sylius_order
 s0_ 
    INNER JOIN 
sylius_customer
 s1_ ON ( s0_.customer_id = s1_.id ) 
    INNER JOIN 
api_user
 a2_ ON ( a2_.customer_id = s1_.id ) 
    LEFT JOIN 
sylius_order_event
 s3_ ON s0_.id = s3_.aggregate_id 
    LEFT JOIN 
sylius_order_item
 s4_ ON s0_.id = s4_.order_id 
    LEFT JOIN 
sylius_adjustment
 s5_ ON s4_.id = s5_.order_item_id 
    LEFT JOIN 
address
 a6_ ON s0_.shipping_address_id = a6_.id 
    LEFT JOIN 
sylius_customer
 s7_ ON s0_.customer_id = s7_.id 
WHERE s0_.id IN ( 
    SELECT s8_.id 
    FROM 
sylius_order
 s8_ 
        INNER JOIN 
sylius_customer
 s9_ ON ( s8_.customer_id = s9_.id ) 
        INNER JOIN 
api_user
 a10_ ON ( a10_.customer_id = s9_.id ) 
    WHERE a10_.id = ? AND s8_.state <> ? 
) 
ORDER BY s0_.created_at DESC 
LIMIT ?
Image
SELECT count ( DISTINCT s0_.id ) 
FROM 
sylius_order
 s0_ 
    INNER JOIN 
sylius_customer
 s1_ ON ( s0_.customer_id = s1_.id ) 
    INNER JOIN 
api_user
 a2_ ON ( a2_.customer_id = s1_.id ) 
    LEFT JOIN 
sylius_order_event
 s3_ ON s0_.id = s3_.aggregate_id 
    LEFT JOIN 
sylius_order_item
 s4_ ON s0_.id = s4_.order_id 
    LEFT JOIN 
sylius_adjustment
 s5_ ON s4_.id = s5_.order_item_id 
    LEFT JOIN 
address
 a6_ ON s0_.shipping_address_id = a6_.id 
    LEFT JOIN 
sylius_customer
 s7_ ON s0_.customer_id = s7_.id 
WHERE s0_.id IN ( 
    SELECT s8_.id 
    FROM 
sylius_order
 s8_ 
        INNER JOIN 
sylius_customer
 s9_ ON ( s8_.customer_id = s9_.id ) 
        INNER JOIN 
api_user
 a10_ ON ( a10_.customer_id = s9_.id ) 
    WHERE a10_.id = ? AND s8_.state <> ? 
)
Image

It seems possible to disable the usage of DISTINCT

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions