У меня все еще есть проблема
EXPLAIN EXTENDED SELECT
`item`.`id`,
`item`.`timestamp`,
`item`.`label`
FROM
item
WHERE
item.dataTypeId=30
GROUP BY
item.id
ORDER BY
item.timestamp DESC
LIMIT 0,6;
Id & timestamp - это пара первичных ключей (mediumint + datetime)
dataTypeId - это внешний ключ (mediumint)
таблица создается как InnoDb
Может быть больше записей с одинаковым идентификатором и разной отметкой времени (версии одного и того же элемента). Это причина для группировки по .
Я читал, например, этот: похожая тема по stackoverflow
но это не решило мою проблему.
Я пытался создать следующие индексы:
- индекс включен (dataTypeId, id, timestamp) - в этом порядке
- индекс включен (dataTypeId, timestamp) - в этом порядке
- индекс по id
- индекс на отметке времени
последние два - маленький кусочек отчаяния
я думаю, что должен пропустить что-то простое -
но на самом деле не знаю что.
Не ожидайте решения (было бы неплохо :), просто пинайте меня правильным путем:)
sort_buffer_size теперь 4194288
редактирование:
объяснить - без индексов
"1" "SIMPLE" "item" "ref" "FK_dataTypeId" "FK_dataTypeId" "4" "const" "5608" "Using where; Using temporary; Using filesort"
объяснить с помощью созданных индексов
"1" "SIMPLE" "item" "ref" "FK_udssDataItem_1,testIndexType,testIndexTypeTimestamp,testIndexTypeIdTime" "FK_udssDataItem_1" "4" "const" "5632" "Using where; Using temporary; Using filesort"