Как я могу улучшить этот внутренний запрос на соединение? - PullRequest
0 голосов
/ 23 февраля 2020

В моей базе 3 таблицы. Один называется Заказчик, другой - Заказы, а другой - RMA. Таблица RMA содержит информацию о возвратах. Я включу снимок экрана всех трех, чтобы вы могли видеть соответствующие атрибуты. Это код запроса, над которым я работаю:

SELECT State, SKU, count(*) from Orders INNER JOIN Customer ON Orders.Customer_ID = Customer.CustomerID INNER JOIN RMA ON Orders.Order_ID = RMA.Reason Group by SKU Order by SKU LIMIT 10;

Я пытаюсь узнать, сколько каждого продукта (SKU) возвращается в каждом штате (State) , Любая помощь будет принята с благодарностью. Я не уверен, почему, но каждый раз, когда я включаю оператор JOIN, мой запрос обрабатывается от 5 минут до 20 минут.

Orders table [Таблица клиентов]

! 2 [таблица RMA]

! 3

Ответы [ 2 ]

1 голос
/ 23 февраля 2020

Ваш запрос должен выглядеть следующим образом:

SELECT c.State, o.SKU, COUNT(*)
FROM Orders o INNER JOIN
     Customer c
     ON o.Customer_ID = c.CustomerID JOIN
     RMA
     ON o.Order_ID = RMA.Order_Id
GROUP BY c.State, o.SKU
ORDER BY SKU;

Возможно, ваша проблема в неправильном JOIN условии между Orders и RMA.

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

0 голосов
/ 23 февраля 2020

Учитывая, что вы объединяетесь с таблицей заказов, я предполагаю, что эта таблица содержит все заказы, которые когда-либо делала компания. Это может быть довольно большим и, вероятно, вызвать медлительность, которую вы видите.

Вы, вероятно, можете улучшить этот запрос, если наложите какое-то ограничение на выбранные вами заказы, ограничив, какой диапазон дат вы используете, что является обычным способом выполнения. это. Если вы предоставите больше информации о том, для чего предназначен запрос, и о размере набора данных, то каждый сможет дать более точное представление о том, какие фильтры будут работать лучше всего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...