Во-первых, извините, если используемые условия не являются правильными. Я не профессионал mySQL.Добавить индекс в колонку
У меня есть таблица вроде этого:
CREATE TABLE `accesses` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`time` int(11) DEFAULT NULL,
`accessed_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `index_accesses_on_accessed_at` (`accessed_at`)
) ENGINE=InnoDB AUTO_INCREMENT=9278483 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
Эта таблица имеет 10.000.000 строк в нем. Я использую его для создания диаграмм с такими запросами:
SELECT SUM(time) AS value, DATE(created_at) AS date
FROM `accesses`
GROUP BY date;
Этот запрос очень длинный (более 1 минуты). Я делаю много других запросов (с AVG
, MIN
или MAX
вместо SUM
или с WHERE
на определенный день или месяц, или GROUP BY HOUR(created_at)
, и т.д. ...)
Я хочу, чтобы оптимизировать его. Лучшая идея заключается в том, чтобы добавить несколько столбцов с избыточностью, например DATE(created_at)
, HOUR(created_at)
, MONTH(created_at)
, а затем добавить на нее указатель.
... Является ли это решение хорошим или есть ли другое?
С уважением
Возможно, было бы разумно дать полное объявление таблицы, вывод: 'SHOW CREATE TABLE accesses' – NDM
1 минута hella long для простого запроса выбора, подобного этому, даже с количеством записей, которые у вас есть. Я задал этот вопрос [DatabaseAdministrators] (http://dba.stackexchange.com/). – Alternatex
ну, он 'group' и' sum' на 10 mil records, не ограничивая набор результатов ... – NDM