Добавление индекса к каждому отдельному столбцу не позволяет базе данных должным образом оптимизировать запрос (одновременно будет использоваться только один индекс).
Для начала: оптимизировать предложение where
, вам понадобится составной индекс для обоих столбцов, например:
tableData(date, floor)
Но чтобы сделать это еще более эффективным, вы также можете добавить столбец, который используется для сортировки в индексе, так:
tableData(date, floor, timestamp)
Если вы используете MySQL 8.0, вы можете сделать индекс по убыванию по столбцу timestamp
:
tableData(date, floor, timestamp desc)
Наконец: одним из вариантов будет добавление других столбцов, которые вы select
в индексе, чтобы сделать его охватывающим индекс; это может позволить выполнить весь запрос с использованием только индекса (ie без просмотра данных таблицы):
tableData(date, floor, timestamp desc, device_id, power)
Для получения дополнительной информации о том, как оптимизировать использование индексов в MySQL Я бы порекомендовал прочитать замечательную MySQL индексную кулинарную книгу , написанную Риком Джеймсом (который также является активным пользователем SO).