2017-01-07 4 views
1

У меня есть функция, в которой я должен получать данные (строку) из большой таблицы (содержит миллионы записей) с фильтром в поле столбца «текст». Проблема в нормальной итерации после простого запроса в этой таблице - это тайм-аут.Извлечение строки из поля столбца «текст» из очень большого 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) 

С сценарии, упомянутые выше, вопросы, которые у меня есть, -

  1. Есть ли лучший способ (чем просто создание индексов в таблице) до выборка данных, где мы ищем поле «текст» на очень большой таблице.
  2. Как создать индекс в этой таблице? Что я делаю неправильно?
  3. Более конкретный для моей usecase. Если я не могу создать индекс в этой таблице. Тем не менее, я могу быстро получить данные из этой таблицы с тем же запросом на выбор (упомянутый выше)? Допустим, что поле unique_txt_id всегда будет числовым (ну, это до сих пор).

ответ

1

Если в столбце имеется только несколько символов, измените столбец на соответствующий тип, например varchar(32).

Если вы не хотите, чтобы сделать это, вы можете указать начальную длину индекса:

alter table st_overflow_tbl add index uti_idx (uniue_txt_id(32)) 

И, наконец, если это на самом деле представляет собой текстовый столбец, который содержит слова и так далее, то вам может исследовать полный текстовый индекс.

+0

Принимая ваш ответ, поскольку это помогло в решении проблемы с индексированием запроса. Но теперь проблема заключается в том, что этот альтернативный запрос для индексирования - это тайм-аут. Я не использую инструмент UI, его простой терминал. Как я могу убедиться, что сервер не сбросит соединение? У меня нет доступа к серверу sql. –

+0

@ManishShukla. , , Насколько велика таблица? –

+0

около 5 миллионов записей. (Dont go 12063881 фигура в команде объяснения. Реальное число было изменено.) –