Во-первых, я немного почистил читабельность.Вам не нужно отмечать tick
вокруг каждой ссылки на table.column.Также, для краткости, использование псевдонимов работает хорошо.Например: «po» вместо «purchase_order», «poi» вместо «purchase_order_items».Единственный раз, когда я бы использовал тиковые метки, это зарезервированные слова, которые могут вызвать проблему.
Во-вторых, у вас нет никаких агрегаций (сумма, мин, максимум, количество, среднее и т. Д.) В вашем запросе.так что вы должны иметь возможность удалить предложение GROUP BY.
Что касается индексов, я должен предположить, что у вас есть индекс в ваших ссылочных таблицах для соответствующих им столбцов ключа "id".
Для вашей таблицы заказов на покупку у меня будет индекс на основе «po_date» в первой позиции поля индекса, если у вас уже есть индекс, использующий его.Так как ваш Order by находится на этом, позвольте движку сначала перейти к этим датированным записям, и ваш порядок убывания будет решен.
SELECT
po.id,
po.po_date,
po.po_number,
po.customer_id,
c.`name` AS customer_name,
po.`status` AS po_status,
poi.product_id,
poi.po_item_name,
p.weight as product_weight,
p.pending as product_pending,
p.company_owner,
poi.uom,
poi.po_item_type,
poi.order_sequence,
poi.pending_balance,
poi.quantity,
poi.notes,
poi.`status` AS po_item_status,
poi.id AS po_item_id
FROM
purchase_order po
INNER JOIN customer c
ON po.customer_id = c.id
INNER JOIN purchase_order_items poi
ON po.id = poi.po_id
INNER JOIN product p
ON poi.product_id = p.id
ORDER BY
po.po_date DESC
LIMIT
0, 20