Я столкнулся серьезные проблемы с производительностью после фиксации запроса:проблема производительности с отметкой времени в MySql
SELECT
...
IF (Order_SG.Payment_Date = '0000-00-00', Order_SG.Creation_Date, Order_SG.Payment_Date) AS `DATE`,
...
FROM Order_SG
INNER JOIN Customer USING (Customer__)
INNER JOIN Order_SG_Detail USING (Order_SG__)
INNER JOIN Product_Ref USING (Product_Ref__)
INNER JOIN Reduction USING (Reduction__)
WHERE ...
-- AND DATE BETWEEN '2016-02-10 00:00:00' AND '2016-02-11 00:00:00'
AND Order_SG.Stamp BETWEEN '2016-02-10 00:00:00' AND '2016-02-11 00:00:00'
LIMIT 2000
OFFSET 0;
Перед Испытание проводили на DATE
, и запрос будет работать в 0,174 сек.
После Испытание проводят на Stamp
в 15.564 сек (РЗМ: это имеет смысл, что запрос будет возвращать больше строк).
Order_SG
содержит около 31 миллиона строк.
Order_SG.Stamp
определяется следующим образом:
Какие есть варианты? Как я могу решить эту проблему с производительностью?
UPDATE
Я установил 2016-02 23:59:59
опечатку и перепроверить мои номера. Я обновил свои данные выше.
SHOW INDEX FROM Order_SG
не возвращает записи для Stamp
, но есть BTREE
индекс Creation_Date
и Payment_Date
, которые используются для создания DATE
.
Is 'AND '2016-02 23: 59: 59'' только опечатка? – jarlh
Тип данных столбца? – jarlh
php 'max_execution_time' не влияет на время выполнения запросов к базе данных, так как php учитывает только время процессора, используемое самим скриптом php. все остальные (время db, время передачи сети) в это не включены. Так что это не имеет значения. – poncha