Лучшая практика для создания базы данных схемы для моего случая - PullRequest
0 голосов
/ 16 сентября 2018

Я работаю в приложении с большой базой данных и мучаюсь из-за медлительности некоторых моих запросов.

Итак, мне нужно дать мне совет по изменению схемы, если мне нужно.

У меня есть приложение о транзакциях и счетах, каждый счет содержит более 100-250 транзакций.

Итак, у меня есть запрос, чтобы получить все счета и суммировать сумму транзакции.

выполнение этого запроса занимает более 10 секунд.

Можете ли вы дать мне совет по улучшению этого запроса.

этот запрос будет получать счета по 10 тыс., И каждый счет имеет 100-250 транзакций

SELECT id, amount, (
  select sum(amount)
  from transactions
  where invoice_id = invoices.id
) as paid from invoices

спасибо

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Ваш запрос логичен. Я бы написал так:

select i.id, i.amount,
       (select sum(t.amount)
        from transactions t
        where t.invoice_id = i.id
       ) as paid
from invoices i;

Для производительности вам нужен индекс на transactions(invoice_id, amount):

create index idx_transaction_invoice_amount on transactions(invoice_id, amount);
0 голосов
/ 16 сентября 2018

используйте соединение и, если у вас нет отношения внешнего ключа с таблицей транзакций, то создайте это отношение с таблицей счетов

SELECT id,sum(amount)
 from invoices i join transactions t on t.invoice_id = i.id
group by id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...