Обновление поля из хранимой процедуры - PullRequest
0 голосов
/ 20 апреля 2020

У меня очень медленный запрос, который извлекает общее количество продуктов для каждого производителя в базе данных. Таблица Producer имеет счетчик только 1 КБ, но таблица Product имеет счет 50 КБ.

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

/*GET A LIST OF ALL PRODUCERS AND THEIR Product COUNTs */
SELECT p.producer, p.producerID, p.image, p.phone, p.email,
       (SELECT COUNT(*) 
          FROM Product pp
         WHERE pp.producerID = p.producerID) TotalProducts
  FROM Producer p
ORDER BY TotalProducts DESC;

Вопрос: Как мне обновить новое поле в таблице Producer (totalProducts) для каждого идентификатора производителя? Нужно ли конвертировать это в al oop?

1 Ответ

2 голосов
/ 20 апреля 2020

Вы можете использовать многостабильное обновление для генерации значения для столбца:

UPDATE Producer p
JOIN (SELECT producerID, COUNT(*) AS TotalProducts 
      FROM Product
      GROUP BY producerID) pp ON pp.producerID = p.producerID
SET p.TotalProducts = pp.TotalProducts 

Но ... если вы используете этот подход, вам нужно обновлять это значение каждый раз, когда вы INSERT, UPDATE или DELETE строк в таблице Product (вам потребуется использовать триггеры для выполнения sh этого).

Ваш запрос не выглядит так, как будто он должен быть особенно медленным , Вы проверили вывод EXPLAIN, чтобы убедиться, что он правильно использует индексы?

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