я до сих пор следующие проблемыпорядок по причинам FileSort
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 & метка является первичным ключом пара (MEDIUMINT + DateTime) dataTypeId является внешним ключом (MEDIUMINT) таблица создается как InnoDb
Может быть больше записей с одинаковым идентификатором и другой временной меткой (версии одного и того же элемента). Это аргумент для группы по.
Я прочитал, например, это один: similar topic on stackoverflow
но оно не решить мою проблему.
Я пытался создать следующие показатели:
- индекс (dataTypeId, идентификатор метки времени) - в таком порядке
- индекс (dataTypeId, метки времени) - в этом порядке индекса
- по идентификатору
- индекс метки времени
последние два это маленький кусочек отчаяния
Я думаю, я должен пропустить что-то основное -
, но на самом деле не знаю, что.
Не ожидайте, что решение (было бы неплохо :) просто удар мне правильный путь :)
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"
Сортировка файлов не означает, что вы выбрали ** результат запроса EXPLAIN ** – ajreal 2010-12-03 14:03:22
запрос по строке 5000 занимает 2 секунды, я упростил свой первоначальный запрос до минимального размера - и попробовал шаг за шагом, кроме одного возможный причина после другой. Единственная «горячая точка» в EXPLAIN - это «файловая система». Другие строки работают через индексы с небольшим количеством строк ... – jakub 2010-12-03 15:11:08
Во-первых, вы GROUPing по id, но вы заказываете по timestamp ... это не логично. Вероятно, вам нужно упорядочить с помощью некоторой совокупной функции (AVG/MAX/MIN) на отметке времени. – Riedsio 2010-12-03 15:15:46