Задавайте вопросы, мы ответим
Вы не зашли.
Всем добрый день.
Есть такая таблица.
Отредактированно rugo (05.03.2023 10:52:56)
Неактивен
Для первого запроса нужен индекс (`sensor_id`,`timestmp`,`val`)
Желательно, чтобы innodb_buffer_pool_size вмещал данные и индексы или активно использующуюся часть данных.
Неактивен
3. Зависит от того:
-) Сколько требуется на нахождение нужных записей (размер таблицы, подходящие индексы)
-) Сколько выбирается (кол-во записей, размер каждой записи)
4. Какая версия?
Разбить на десять запросов не эквивалентно исходному, т.к. общий результат отсортирован по timestmp
В случае десяти отдельных запросов их выборки нужно будет складывать и сортировать отдельно.
timestamp занимает в два раза меньше места. Явно эффект проявится, когда буфера будет не хватать.
Неактивен
vasya написал:
Для первого запроса нужен индекс (`sensor_id`,`timestmp`,`val`)
.
Сделал индекс на три колонки, стало чуть побыстрее (вместо 15с - 10с).
И вообще с индексами на sensor_id и timestmp интересная картина. Без них и с ними запрос 15с.
vasya написал:
Желательно, чтобы innodb_buffer_pool_size вмещал данные и индексы или активно использующуюся часть данных.
.
Делаю innodb_buffer_pool_size=1G (или 4G), перезапускаю сервис - результаты запросов те же самые.
vasya написал:
4. Какая версия?
.
mysql> status;
--------------
mysql Ver 8.0.32-0ubuntu0.22.04.2 for Linux on x86_64 ((Ubuntu))
Connection id: 10
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 8.0.32-0ubuntu0.22.04.2 (Ubuntu)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
UNIX socket: /var/run/mysqld/mysqld.sock
Binary data as: Hexadecimal
Uptime: 44 sec
Threads: 2 Questions: 21 Slow queries: 1 Opens: 147 Flush tables: 3 Open tables: 65 Queries per second avg: 0.477
Неактивен