У меня есть очень простую таблицу с тремя столбцами:MySQL - Низкая производительность в выберите из простой таблицы
- A BigINT,
- Another BigINT,
- A string.
Первые два столбца определяется как INDEX и нет никаких повторов. Более того, оба столбца имеют значения в растущем порядке.
В таблице содержится почти 400 тыс. Записей.
нужно выбрать строку, когда значение находится в пределах тех из колонны 1 и два, в порядке слов:
SELECT MyString
FROM MyTable
WHERE Col_1 <= Test_Value
AND Test_Value <= Col_2 ;
В результате может быть либо не найден или одно значение.
Запрос занимает почти целую секунду, в то время как интуитивно (представляя двоичный поиск по всему массиву), он должен занимать всего лишь небольшую долю секунды.
Я проверил тип индекса, и он равен BTREE для обоих столбцов (1 и 2).
Любая идея, как улучшить производительность?
Заранее спасибо.
EDIT: Explain, гласит:
Выберите тип: Простой, Тип: Range, Возможные ключи: ОСНОВНОЙ Ключ: первичный, Длина ключа: 8, Ряды: 441, фильтрованной: 33,33 , Дополнительно: Использование где.
имеют составной индекс? – YOU
При поиске рекомендаций по производительности необходимо показать свою точную структуру таблицы и индексы. Также полезно использовать команду EXPLAIN, чтобы заставить планировщик запросов описать, что он делает. Пожалуйста, отредактируйте свой вопрос, чтобы включить эти предметы. –
Нет составного индекса @YOU. – FDavidov