В качестве продолжения моего предыдущего вопроса здесь: Ссылка
Это мои таблицы:
-----------------------------------
ID | ChapterNo | HitCount | MID
-----------------------------------
1 | 2 | 1000 | 1
2 | 2 | 2000 | 1
3 | 1 | 3000 | 1
4 | 3 | 1000 | 1
5 | 1 | 3500 | 1
-----------------------------------
для архивации результата, я попытался использоватьff query:
SELECT t1.id, t1.hitcount, t1.chapterno
FROM chapter as t1
WHERE t1.hitcount = (select max(hitcount) from chapter where chapterno = t1.chapterno and `mid` = t1.`mid`)
AND t1.`mid` = '2524'
ORDER BY t1.chapterno DESC
ID | ChapterNo | HitCount |
---------------------------
4 | 3 | 1000 |
2 | 2 | 2000 |
5 | 1 | 3500 |
---------------------------
Похоже, этот запрос поначалу работает очень хорошо, но в масштабе, после того как я импортирую 80 000 записей для тестирования и реализации.Я узнаю, что это длилось 30 секунд.Объяснение показывает:
sel_type table type posible_key key keyLen ref rows Extra
PRIMARY t1 ref mid_idx mid_idx 8 const *3289* Using where; Using filesort
PRIMARY chapter ref mid_idx mid_idx 8 m.t1.mid *17* Using where; Using temporary; Using filesort
Результирующий набор состоит из 640 строк.Есть ли действительно хороший способ оптимизировать это для больших таблиц?Поскольку эта таблица и особенно этот запрос будет расти больше в будущем.
Поможет ли использование процедуры в mysql для этого запроса?
Большое спасибо