Я делаю поиск имен в строках так:
|
1 |
SELECT * FROM data WHERE name LIKE "%иванов%" and name LIKE "%иван%" and name LIKE "%иванович%" |
Всё работает так как мне нужно. но скорость поиска всегда выше 3 секунд и при большом кол-ве элементов в запросе увеличивается.
Я пробовал использовать nocase, binary, rtrim индексы, но скорость оставалась такой же или была больше.
Если убрать % в начале любого слова, то к примеру индекс nocase успешно работает, но в таком случае рушится логика моего изначального запроса.
Что можно предпринять в данном счучае?
Дополнительно:
Содержание
Запись, соответствующая name LIKE "%иванович%", также оответствует двум другим условиям. Посему их можно удалить, что ускорит запрос почти втрое.
Что можно предпринять в данном счучае?
Используемые условия - non-SARGable. Посему только менять технологию поиска.
Скорее всего надо смотреть в сторону использования суффиксных деревьев. Или, если подлежащая поиску группа должна составлять целый токен, а не фрагмент - то поможет словаризация токенов.
Ответы:
Ну во первых смысл неправильный. У тебя - взаимоисключающие предикаты. Поэтому надо использовать OR.
Уже написали выше про это.
Попробуй так. Должно быть быстрее.
SELECT * FROM data WHERE name LIKE "Иван%";
И построй индекс по name. А лидирующий метасимвол % лучше не ставить т.к. это отключает
возможность использования классическийх B-Tree индексов.
Для решения данной проблемы вы можете воспользоваться услугами фрилансеров. Мы выполним необходимую работу быстро и качественно.
Оставить комментарий Отменить
Ответы
- Есть ответ! к записи Как уменьшить масштаб меньше 100% в Windows 10 (22H2)
- Есть ответ! к записи Аналоги CloudFlare в России?
- Есть ответ! к записи Аналоги CloudFlare в России?
- Есть ответ! к записи Как называется человек, который дизайн придумает для сайта и сверстает его?
- Есть ответ! к записи Можно ли установить Яндекс.Диск на АльтЛинукс?
- Есть ответ! к записи Картинки мутные только на сафари, есть выход?
- Есть ответ! к записи Keenetic. Как настроить SSTP клиент с сертификатом?
- Есть ответ! к записи Чем заменить executor в aiogram 3?
Для ускорения запроса в базе данных и повышения производительности при работе с большим объемом данных, можно воспользоваться индексами. Индексы позволяют быстро находить нужные записи в таблице, уменьшая время выполнения запросов.
Для оптимизации запросов и увеличения скорости выполнения можно использовать различные типы индексов, такие как:
1. Primary Key Index - индекс, который уникально идентифицирует каждую запись в таблице. Он используется для быстрого поиска конкретной записи.
2. Unique Index - индекс, который гарантирует уникальность значений в столбце или комбинации столбцов.
3. Composite Index - индекс, созданный на нескольких столбцах. Он позволяет ускорить запросы, которые используют условия на эти столбцы.
4. Indexes on Foreign Keys - индексы на внешние ключи ускоряют соединения таблиц.
Пример создания индекса в MySQL на столбце
nameв таблицеusers:Необходимо также помнить, что создание слишком большого количества индексов может привести к увеличению размера базы данных и замедлению операций записи данных. Поэтому важно анализировать запросы и выбирать наиболее оптимальные индексы для конкретной ситуации.
Также стоит регулярно анализировать выполнение запросов с помощью инструментов для профилирования базы данных, чтобы выявлять узкие места и оптимизировать их.