У меня есть таблица, которая содержит не менее 60000 строк. Мой запрос просто базовый и выглядит примерно так:
SELECT `table`.name, `table`.age, `table`.points
FROM table
GROUP BY name, age
ORDER BY date
DESC
LIMIT 12
Результат как (Всего 12, запрос занял 1,2211 с), иногда это даже занимает 2 секунды, чтобы просто вернуть 12 строк.
Что нужно сделать, чтобы сделать мой запрос быстрее?
ПОЯСНИТЕ ЗАПРОС:
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
1 Extra table ALL NULL NULL NULL NULL 65704 Using temporary; Using filesort
Это слишком долго для комментария.
Поможет индекс по дате, без этого он вынужден делать сканирование таблицы.
Кроме того, какова мощность имени, то есть количество отдельных имен, поделенных на количество строк? В случае, если оно мало, вы можете создать таблицу с этими различными именами и JOIN для этого с целью сканирования свободного индекса.
Для начала попробуйте составной индекс:
ALTER TABLE t1 ADD KEY indexName (name,age,date)
Для более подробной информации положите EXPLAIN
перед вашим запросом и отредактируйте ваш вопрос с результатами.
Возможно, вы захотите создать индексы в вашей базе данных SQL.
Если вы используете MYSQL, вы можете создать их следующим образом
ALTER TABLE TABLE_NAME ADD INDEX (COLUMN_NAME);
Для вашего случая это будет выглядеть так:
ALTER TABLE `table` ADD INDEX (name);
ALTER TABLE `table` ADD INDEX (age);
ALTER TABLE `table` ADD INDEX (points);
Вы также можете посмотреть на этот вопрос