Как можно ускорить запрос или какой индекс использовать?
Я делаю поиск имен в строках так:
SELECT * FROM data WHERE name LIKE "%иванов%" and name LIKE "%иван%" and name LIKE "%иванович%" |
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 индексов.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для ускорения запроса в базе данных и повышения производительности при работе с большим объемом данных, можно воспользоваться индексами. Индексы позволяют быстро находить нужные записи в таблице, уменьшая время выполнения запросов.
Для оптимизации запросов и увеличения скорости выполнения можно использовать различные типы индексов, такие как:
1. Primary Key Index - индекс, который уникально идентифицирует каждую запись в таблице. Он используется для быстрого поиска конкретной записи.
2. Unique Index - индекс, который гарантирует уникальность значений в столбце или комбинации столбцов.
3. Composite Index - индекс, созданный на нескольких столбцах. Он позволяет ускорить запросы, которые используют условия на эти столбцы.
4. Indexes on Foreign Keys - индексы на внешние ключи ускоряют соединения таблиц.
Пример создания индекса в MySQL на столбце `name` в таблице `users`:
CREATE INDEX idx_name ON users (name);
Необходимо также помнить, что создание слишком большого количества индексов может привести к увеличению размера базы данных и замедлению операций записи данных. Поэтому важно анализировать запросы и выбирать наиболее оптимальные индексы для конкретной ситуации.
Также стоит регулярно анализировать выполнение запросов с помощью инструментов для профилирования базы данных, чтобы выявлять узкие места и оптимизировать их.