Как можно оптимизировать данный запрос ?
SELECT InstanceID, max(Slot) as slot,
(SELECT reseller
FROM `mod_TeamSpeak3Statistics_instance`
WHERE`InstanceID` = mod_TeamSpeak3Statistics_data.InstanceID) as 'reseller',
(SELECT partner
FROM `mod_TeamSpeak3Statistics_instance`
WHERE`InstanceID` = mod_TeamSpeak3Statistics_data.InstanceID) as 'partner',
`Timestamp` AS 'date'
FROM `mod_TeamSpeak3Statistics_data`
WHERE DATE_FORMAT(FROM_UNIXTIME(`Timestamp`), '%Y-%m-%d') ='2016-12-18'
GROUP by DATE_FORMAT(FROM_UNIXTIME(`Timestamp`), '%Y-%m-%d'),InstanceID
ORDER BY InstanceID ASC
Профилирование:
Минимизировать использование полей в выражениях. (Не знаю насколько MySQL здесь отличается от MS SQL, но логично, что вычислить пару констант проще, чем применять преобразование к каждой строке)
SELECT InstanceID,
max(Slot) as slot,
i.reseller,
i.partner,
Timestamp AS 'date'
FROM mod_TeamSpeak3Statistics_data d
JOIN mod_TeamSpeak3Statistics_instance i ON i.InstanceID = d.InstanceID
WHERE Timestamp BETWEEN UNIX_TIMESTAMP('2016-12-18 00:00:00') AND UNIX_TIMESTAMP('2016-12-18 23:59:59')
GROUP by DATE_FORMAT(FROM_UNIXTIME(Timestamp
), '%Y-%m-%d'), InstanceID
ORDER BY InstanceID ASC
SELECT md.InstanceID,
max(md.slot) as 'slot',
mi.reseller as 'reseller',
mi.partner as 'partner',
md.Timestamp AS 'date'
FROM mod_TeamSpeak3Statistics_data md, mod_TeamSpeak3Statistics_instance mi
WHERE DATE_FORMAT(FROM_UNIXTIME(md.Timestamp), '%Y-%m-%d') ='2016-12-18'
AND md.InstanceID = mi.InstanceID
GROUP by 5, 1
ORDER BY 1 ASC
Проиндексировать InstanceID если то не PK в mod_TeamSpeak3Statistics_data Приложить план запроса, что б вам помогли правильно оптимизировать запрос.
UDP после удаления индекса InstanceID для таблицы mod_TeamSpeak3Statistics_data данный запрос выполняется за 0.1990 сек (В среднем 0.2300 сек)
SELECT
d.InstanceID,
max(d.Slot) as slot,
max(d.Online) as Online,
i.reseller,
i.partner,
Timestamp
FROM mod_TeamSpeak3Statistics_data d
JOIN mod_TeamSpeak3Statistics_instance i ON i.InstanceID = d.InstanceID
WHERE Timestamp between UNIX_TIMESTAMP('2016-12-20 00:00:00') and UNIX_TIMESTAMP('2016-12-20 23:59:59')
GROUP by DATE_FORMAT(FROM_UNIXTIME(d.Timestamp), '%Y-%m-%d'), d.InstanceID
ORDER BY 1 ASC
План запроса:
Профилирование:
Какие варианты оптимизации существуют ещё ?
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Ребята, помогите, разобраться на пальцах(ситуацию упростил до самой сути)