Предоставление SHOW CREATE TABLE
поможет. Между тем, я думаю.
Это может (или не может) помочь. Он пытается выполнить суммирование без перетаскивания всех столбцов products
. Это позволяет избежать GROUP BY
.
SELECT p2.*,
IFNULL(x.usesQuantity, 0) as `usesQuantity`,
GREATEST(p2.`productQuantity` - IFNULL(x.usesQuantity), 0) AS `totalUses`
FROM `products` AS p2
LEFT JOIN
( SELECT p.id AS xid,
SUM(pu.quantity) as `usesQuantity`
FROM products_uses AS pu
JOIN products AS p ON p.id = pu.productId
WHERE p.nurseForm = 1
) AS x ON x.xid = p2.id
ORDER BY p2.`fav` DESC,
p2.`productName` ASC
Эти индексы должны помочь:
products: INDEX(nurseForm, id)
products: PRIMARY KEY(id) -- I am assuming this??
products_uses: INDEX(productId, quantity)
Если LEFT
не нужны, были бы и другие оптимизации.
MySQL 5.6 поможет с подзапросом. MySQL 8.0 может помочь с ORDER BY
, между тем, сортировка требуется из-за смеси DESC
и ASC
.
Значение query
в полезной нагрузке JSON должно быть строкой, содержащей запрос GraphQL, а не объект, который вы используете, например:
$ curl \
-H "Content-Type: application/json" \
-d '{ "query": "mutation { createScreenshot(input: { username: \"Odour\" }) { id } }" }' \
http://localhost:8080/query
Обратите внимание, что вам нужно экранировать двойные кавычки в строке запроса.