У меня есть функция, в которой я должен получать данные (строку) из большой таблицы (содержит миллионы записей) с фильтром в поле столбца «текст». Проблема в нормальной итерации после простого запроса в этой таблице - это тайм-аут.Извлечение строки из поля столбца «текст» из очень большого Mysql DB
select * from st_overflow_tbl where uniue_txt_id = '123456'
Я выполнил команду объяснения и обнаружил, что на unique_txt_id нет индексации. ниже.
"id","select_type","table","type","possible_keys","key","key_len","ref","rows","Extra"
1,"SIMPLE","st_overflow_tbl","ALL",NULL,NULL,NULL,NULL,12063881,"Using where"
I, а затем попытался создать индекс для этой таблицы, но это не удается с следующим сообщением об ошибке -
BLOB/TEXT column 'uniue_txt_id' used in key specification without a key length
командованию, что я был запущен в этом -
alter table st_overflow_tbl add index uti_idx (uniue_txt_id)
С сценарии, упомянутые выше, вопросы, которые у меня есть, -
- Есть ли лучший способ (чем просто создание индексов в таблице) до выборка данных, где мы ищем поле «текст» на очень большой таблице.
- Как создать индекс в этой таблице? Что я делаю неправильно?
- Более конкретный для моей usecase. Если я не могу создать индекс в этой таблице. Тем не менее, я могу быстро получить данные из этой таблицы с тем же запросом на выбор (упомянутый выше)? Допустим, что поле
unique_txt_id
всегда будет числовым (ну, это до сих пор).
Принимая ваш ответ, поскольку это помогло в решении проблемы с индексированием запроса. Но теперь проблема заключается в том, что этот альтернативный запрос для индексирования - это тайм-аут. Я не использую инструмент UI, его простой терминал. Как я могу убедиться, что сервер не сбросит соединение? У меня нет доступа к серверу sql. –
@ManishShukla. , , Насколько велика таблица? –
около 5 миллионов записей. (Dont go 12063881 фигура в команде объяснения. Реальное число было изменено.) –