У меня есть проблема относительно федеративной таблицы двигателя:Slow SELECT ... LIMIT без ИНЕК на федеративной таблице
Я создал федеративную таблицу, указывающую на разумную большую удаленную таблицу (около 800,000 строк, размер строки 211 байт, MyISAM).
При отправке следующего запроса:
SELECT * FROM TABLE LIMIT 0,30
запрос занимает всегда 9 секунд.
Попытка:
SELECT * FROM TABLE WHERE primaryKey = 1234
быстро, как обычно (< 0.001s).
Я попытался использовать федеративный стол на нескольких серверах db, всегда тот же результат. Теперь мой вопрос: что-то случилось за занавеской, которую я не знаю? Получает ли Mysql весь индекс без предложения WHERE? Требуется ли некоторая внутренняя сортировка?
В любом случае, на мой взгляд, удаленный сервер db, обслуживающий данные, должен обрабатывать это без задержки, не так ли?
Mysql version: 5.5.31
Для первого запроса MySQL извлекает все 800 000 строк, тогда он принимает 30 из них, начиная с 0-го смещения внутреннего указателя результата и отбрасывая остальные. Поскольку это MyISAM, это связано с большим количеством дисковых операций ввода-вывода. Один из способов «помочь» MySQL сделать это быстрее - это реализовать небольшой чит. Вы можете помочь ему, выполнив что-то вроде 'SELECT * FROM table WHERE id <1000 LIMIT 0, 30'. Теперь, как вы уже видите, я назвал это читом, потому что вам нужно как-то помочь MySQL сократить набор данных, которые он ищет, - ПК всегда является идеальным кандидатом на это. –