У меня есть таблица в MySQL db с около 25000 записей. Каждая запись содержит около 200 полей, многие из которых являются ТЕКСТ. Я ничего не могу сделать о структуре - это переход из старого файла db с плоскими файлами, который имеет 16-летние записи, а многие поля являются «текстовыми» типами типа «заметки».MySQL Улучшение скорости порядка по операторам
Пользователи могут просматривать любое количество полей и заказывать любое отдельное поле и любое количество квалификаторов. В этом случае наблюдается значительное замедление, которое обычно занимает несколько секунд, иногда до 7-10 секунд.
пример заявление может выглядеть следующим образом:
select a, b, c from table where b=1 and c=2 or a=0 order by a desc limit 25
Там никогда не звездным выбора, и всегда есть предел, так что я не думаю, что само утверждение действительно может быть оптимизировано много.
Я знаю, что индексы могут помочь ускорить это, но поскольку нет возможности узнать, какие поля будут отсортированы, мне нужно будет индексировать все 200 столбцов - то, что я прочитал об этом, Кажется, это непротиворечиво. Я понимаю, что при вставке или обновлении записей произойдет замедление, но если предположить, что это приемлемо, целесообразно ли добавлять индекс в каждый столбец?
Я читал о sort_buffer_size, но мне кажется, что все, что я читаю, конфликты с последней прочитанной мной записью - желательно ли увеличить это значение или любое другое сходное значение (read_buffer_size и т. Д.)?
Кроме того, основной идентификатор представляет собой сумасшедший шаблон, с которым они столкнулись в девяностые годы. Это ПК и поэтому следует индексировать в силу того, что он является ПК (справа?). Записи (и были) отправлены государству и их клиентам, и я не могу изменить формат. Эта колонка должна сортироваться на основе логики, которая существует, и включает хранимую процедуру с конкатенацией строк и подстрокой. Этот особый вид особенно медленный и, похоже, не кэшируется, хотя это поле индексируется, поэтому я задаюсь вопросом, есть ли что-нибудь, что я могу сделать, чтобы ускорить сортировку по этому конкретному полю (которое является порядком по умолчанию на).
TYIA.
Я думаю, что пришло время перестроить таблицу и структуру базы данных, даже если вы скажете, что не можете этого сделать. Вы можете, по крайней мере, просмотреть все столбцы для нужного типа столбца. –
@PeterKiss везде, где я был в состоянии использовать более оптимальный тип данных, но, как я уже говорил, многие из них представляют собой поля типа «примечания». Ничего большего, чем то, что я сделал, не произойдет. И без родов он работает отлично - узкое место все в этом роде. – momo
Если бы я был вами, я бы следил за всеми запросами в фоновом режиме (например, сохранить все запросы, если это возможно), тогда я буду запускать их с помощью ключевого слова explain и собирать наиболее используемые столбцы и строить на них индексы sima. Отдельные индексы по столбцам не помогут! –