В настоящее время у меня есть консультация, которая работает, по поводу двух таблиц egresos (expenses)
и ingresos (incomes)
. Это пример, как видна структура обоих таблиц, так как они обладают теми же колоннами:
| id| date | amount|
|---------|-------------|---------|
| 1| 2019-02-02 | 2500|
| 2| 2019-03-16 | 4000 |
| 3| 2019-04-02 | 5430 |
и это консультация, которая у меня есть в настоящее время:
SELECT
t1.month,
COALESCE(t2.amount, 0) AS expenses,
COALESCE(t3.amount, 0) AS incomes
FROM
(
SELECT 1 AS month UNION ALL
SELECT 2 UNION ALL
SELECT 3 UNION ALL
SELECT 4 UNION ALL
SELECT 5 UNION ALL
SELECT 6 UNION ALL
SELECT 7 UNION ALL
SELECT 8 UNION ALL
SELECT 9 UNION ALL
SELECT 10 UNION ALL
SELECT 11 UNION ALL
SELECT 12
) t1
LEFT JOIN
(
SELECT MONTH(date) AS month, SUM(amount) AS amount
FROM expenses
GROUP BY MONTH(date)
) t2
ON t1.month = t2.month
LEFT JOIN
(
SELECT MONTH(date) AS month, SUM(amount) AS amount
FROM incomes
GROUP BY MONTH(date)
) t3
ON t1.month = t3.month
ORDER BY
t1.month;
Здесь - нить, чтобы видеть подробно и реализовывать тесты:
Консультация возвращает полную общую сумму обоих таблиц из-за каждого месяца настоящего года, это функционирует хорошо. Однако проверив план выполнения, так как у меня есть много записей, эта опаздывает слишком много, из-за которого Вы пробегаете все записи обоих таблиц. Тогда: как я могу оптимизировать ее? Я старался добавить индекс к полю date
без какого-либо улучшения. Я должен преобразовывать мою консультацию?