Как оптимизировать производительность SQL-запросов - PullRequest
0 голосов
/ 07 февраля 2019

введение

Я делаю запрос несколько раз (один запрос на «услугу» в заданном месте).Запрос, результаты производительности и размер набора данных приведены ниже.Пожалуйста, дайте мне совет о том, как оптимизировать производительность.Спасибо

размер набора данных

  • таблица служб: 8 тысяч строк
  • how_rates_policies: 0,2 миллиона строк
  • how_rates: 1,7 миллиона строк

результаты производительности

Ботсвана

  • Количество услуг: 4
  • Задержка: 7сек
  • Задержка на услугу: около 2 с/ услуга

Кейптаун, КБР

  • Количество услуг: 34
  • Задержка: 4,5 минуты
  • Задержка на услугу: около 7 с/ service

query

DELIMITER $$
CREATE DEFINER= [i removed the db user name here to censor it] PROCEDURE `spx_GetRatesForProduct`(productId INT, priceCode VARCHAR(2), inDate DATETIME, outDate DATETIME)
BEGIN
    DECLARE endRateDate DATETIME;

    SET endRateDate := (SELECT MAX(date_to)
    FROM  how_rates_policies hrp
    WHERE hrp.product_id = productId and hrp.price_code = priceCode and hrp.date_to >= outDate);

-- SELECT endRateDate = IFNULL(endRateDate, '19700101');

IF endRateDate = '19700101' THEN   
   SELECT * FROM  how_rates_policies hrp INNER JOIN how_rates hr ON hrp.id = hr.what_rates_policies_id
    WHERE hrp.product_id = productId 
        AND hrp.price_code = priceCode 
        AND hrp.date_from <= inDate 
        AND hr.rate_category = 'VAL' 
    ORDER BY hrp.date_to;

ELSE
    SELECT * FROM  how_rates_policies hrp 
        INNER JOIN how_rates hr 
            ON hrp.id = hr.what_rates_policies_id
    WHERE hrp.product_id = productId 
        AND hrp.price_code = priceCode 
        AND hrp.date_from <= outDate 
        AND hrp.date_to >= inDate
        AND hrp.date_to <= endRateDate
        AND hr.rate_category = 'VAL' 
    ORDER BY hrp.date_to;

END IF;

END$$
DELIMITER ;

1 Ответ

0 голосов
/ 08 февраля 2019

проблема заключалась в том, что он не выполнял запрос столько раз, сколько мы предположили (Ботсвана: 4 раза; Кейптаун, КБР: 34 раза), на самом деле он выполнялся намного больше

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