Мне нужно поддерживать приложение с помощью команд SQL (управление статьями).Оптимизировать запрос MySQL со многими подзапросами
Один запрос выглядит следующим образом:
SET @from_timestamp = '2013-07-01 00:00:00';
SET @serialnumber = '%aaaa01%';
SELECT
test1.article,
test1.serialnumber,
test2.`timestamp` as test2_timestamp,
test2.additionalinfo,
test1.`timestamp` AS test1_timestamp,
test1.text0 AS test1_text0,
test1.text1 AS test1_text1,
test1.text2 AS test1_text2,
test1.text3 AS test1_text,
test3.text1 as test3_text1,
test3.`timestamp` AS test3_timestamp,
test3.`status`,
TIMESTAMPDIFF(MINUTE, test1.`timestamp`, test3.`timestamp`) as DeltaT
FROM (
SELECT
max(`timestamp`) AS TIMESTAMP,
article,
serialnumber,
text1,
text2,
text3,
text4
FROM exampleTable
WHERE
test = 'test1' AND
`timestamp` >= @from_timestamp AND
os0 LIKE @serialnumber
GROUP BY serialnumber
) AS test1
LEFT JOIN (
SELECT
max(`timestamp`) AS TIMESTAMP,
serialnumber,
status,
text1
FROM exampleTable
WHERE
test = 'test3' AND
`timestamp` >= @from_timestamp
GROUP BY serialnumber
) AS test3
ON test1.serialnumber = test3.serialnumber
LEFT JOIN (
SELECT
max(`timestamp`) AS TIMESTAMP,
serialnumber,
article,
text1
FROM exampleTable
WHERE
LENGTH(serialnumber) = 13 AND
test = 'test2' AND
`status` = -1 AND
`timestamp` >= @from_timestamp
GROUP BY serialnumber
) AS test2
ON test1.serialnumber = test2.serialnumber
ORDER BY test1.`timestamp`
Он работает только с одной таблицей, в которой сохранен данные продукта. Но, как и ожидалось, этот запрос выполняется очень медленно. Возможна ли оптимизация?
Edit: Attached image of the explain sql result
Edit2: Таблица содержит много данных (последний COUNT (*) обеспечивает 39589279 ;-))
Edit3: Attached image of the explain table result
Edit4: Пожалуйста, не вините меня за определение таблицы, он очень старый, разработанный другими ребятами, и его невозможно изменить без нарушения.
Какие столбцы имеют индекс? – Kuzgun
Можете ли вы показать нам результат «EXPLAIN»? – Kermit
Существуют следующие индексы: id (первичный ключ), статья, тест, серийный номер, временная метка –