У меня один запрос, чтобы получить 10 Максимальное значение из базы данных MySQL.Возвращено правильное значение, но проблема в том, что для получения значения
потребовалось много времени. Это значение представляет собой данные процессора с устройства.Итак, с одного устройства приходится около 6 Тип модуля .Для каждого типа модуля есть около 120 номер модуля .Из каждого номера модуля есть 2 слота (активный и резервный) .Номер модуля размещается в каркасе.Мне нужно получить 10 Номер модуля, который имеет наибольшее значение е.
Я пытался использовать свой собственный запрос, он вернул правильное значение, но слот неправильный.Затем я нашел запрос из переполнения стека ( MySQL запрос, MAX () + GROUP BY )
Это моя структура таблицы:
Create Table: CREATE TABLE `Router_Modul_CPU` (
`date_id` date NOT NULL,
`hour_id` time NOT NULL,
`NE` varchar(50) NOT NULL,
`modul_number` int(11) NOT NULL,
`modul_type` varchar(50) NOT NULL,
`slot` int(11) NOT NULL,
`subrack` int(11) DEFAULT NULL,
`mean_memory` float DEFAULT NULL,
`peak_memory` float DEFAULT NULL,
PRIMARY KEY (`date_id`,`hour_id`,`NE`,`modul_number`,`modul_type`,`slot`),
KEY `index_key` (`date_id`,`hour_id`,`NE`,`modul_number`,`modul_type`,`slot`,`subrack`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Это мой запрос :
select
Router_Modul_CPU.NE,
Router_Modul_CPU.modul_number,
Router_Modul_CPU.slot,
Router_Modul_CPU.subrack
from Router_Modul_CPU
inner join
(
select modul_number, max(peak_memory) as maks
from `Router_Modul_CPU`
group by modul_number, NE, subrack
) maxt on
(Router_Modul_CPU.modul_number = maxt.modul_number and
Router_Modul_CPU.peak_memory = maxt.maks)
where modul_type='SPU' and NE='R-D5-SBT' and date_id='2019-02-14'
limit 10
Потребовалось около 40-50 секунд , чтобы получить данные, и эти запросы только для одного устройства
Все эти данные были вставлены каждые 5 минут в эту таблицу.Теперь в этой таблице около 25 миллионов строк.
Есть ли какие-либо настройки для моей таблицы или какие-либо предложения по повышению эффективности моего запроса?
Спасибо