Вот как вы можете создать ИНДЕКС в поле MEDIUMTEXT:
CREATE TABLE textindexexample(
name MEDIUMTEXT,
INDEX(name(255))
);
То же самое, если вам понадобится КЛЮЧ. В существующую таблицу вы можете добавить ее следующим образом:
CREATE INDEX idx ON textindexexample(name(255));
Обратите внимание, что я проиндексировал только первые 255 символов. Это означает, что если два разных текста начинаются с одной и той же последовательности символов в начале, они будут рассматриваться как равные по индексу. Максимальный размер индекса составляет 3072 байта. Так что не более чем name (3072) в обычной кодировке ascii.
Относительно второго вопроса: нет, вы не получите повышения производительности, если все проиндексируете. На самом деле все наоборот - производительность может снизиться, потому что индексы необходимо поддерживать (обновлять, как только вы добавляете данные).
Вы должны индексировать только те столбцы, которые вы используете. Например, поля, которые вы используете в WHERE и JOIN.