Как можно ускорить запрос в MySQL?
Всем привет! У меня стала проблема со скорость выборки 12+ сек. (MySQL) Есть такой запрос -
SELECT COUNT(*)
FROM ( SELECT pitchID
FROM LiveDeck
WHERE lockID=?
GROUP BY pitchID ) AS counter;
На таблице есть индекс (lockID, create_data)(create_data - datetime) который автоматический используется на данный момент для этого запроса,
и есть индекс (pitchID, lockID) для другого запроса. В таблице 20+ мил записей. Пример EXPLAINE этого запроса -
+----+-------------+------------------+------+----------------------+----------------------+---------+-------+-------+----------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------------+------+----------------------+----------------------+---------+-------+-------+----------------------------------------------+
| 1 | PRIMARY | <derived2> | ALL | NULL | NULL | NULL | NULL | 43878 | NULL |
| 2 | DERIVED | LiveDeck | ref | lockID_create_time | lockID_create_time | 4 | const | 43878 | Using where; Using temporary; Using filesort |
+----+-------------+------------------+------+----------------------+----------------------+---------+-------+-------+----------------------------------------------+
Можно ли ускорить выборку добавив индекс (lockID, pitchID) или просто (lockID)?
Не будет ли оптимальней distinct вместе group by ? SELECT COUNT(DISTINCT pitchID) AS counter FROM LiveDeck WHERE lockID=?;
Ответы (1 шт):
Посмотрите на https://habr.com/ru/post/41968/ , https://www.sql.ru/forum/959500/podskazhite-kak-uskorit-vyborku , https://sqlinfo.ru/forum/viewtopic.php?id=474 . Здесь всё написано.