Как ускорить запросы к огромной базе данных MySQL (6 м + строк) - PullRequest
0 голосов
/ 25 января 2019

В рамках проекта я собирал данные от нескольких датчиков, установленных на местах. Цель этого состоит в том, чтобы понять производительность устройств и любые потенциальные проблемы или ошибки, которые могут присутствовать.

Я храню данные в одной таблице в базе данных с идентификаторами столбцов (основной), MAC_address, имя, статус, метка времени.

MAC_address - это то, что гарантированно всегда будет одинаковым для физического устройства, и это то, что я использовал в основном для извлечения информации из базы данных.

Моя цель состояла в том, чтобы иметь возможность извлекать данные за определенный период времени для определенного устройства, MAC-адрес которого можно выбрать из раскрывающегося списка. Даже выполнение одного запроса SELECT DISTINCT для получения списка уникальных MAC-адресов занимало бесконечно долго, но создание индекса для этого столбца, казалось, ускорило его. Однако сейчас для извлечения любого количества полных строк из базы данных требуется> 30 секунд.

Как лучше всего ускорить запросы из такой большой базы данных?

1 Ответ

0 голосов
/ 26 января 2019

Одиночная таблица ... неправильно.

Одна таблица описывает каждое «устройство» (или «датчик»). Он имеет id, который, возможно, является 2-байтовым SMALLINT UNSIGNED (диапазон 0,65K - у вас не будет больше датчиков, чем это?). Обратите внимание, что MAC-адрес и имя принадлежат этой таблице. Это id используется на другом столе ...

Другая таблица содержит sensor_id, timestamp и value. Эта таблица должна иметь PRIMARY KEY(sensor_id, timestamp) и быть ENGINE = InnoDB`. Теперь это очень эффективно для нахождения всех показаний для одного датчика за период времени.

Это полностью исключает SELECT DISTINCT, поскольку в первой таблице нет дуплей.

Если у вас выпадающее меню, то TINYINT UNSIGNED (1 байт, 0..255), вероятно, достаточно большой.

Хорошо, я помог вам с двумя SELECTs; какие еще у тебя будут. Имейте в виду, что производительность в первую очередь зависит от количества строк, к которым нужно прикоснуться. И это число тех, кого вы отвергаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...