Как можно ускорить запрос или какой индекс использовать?

Ссылка скопирована
1 ответ

Я делаю поиск имен в строках так:

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
Игорь Волков Ответ

Для ускорения запроса в базе данных и повышения производительности при работе с большим объемом данных, можно воспользоваться индексами. Индексы позволяют быстро находить нужные записи в таблице, уменьшая время выполнения запросов.

Для оптимизации запросов и увеличения скорости выполнения можно использовать различные типы индексов, такие как:
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);

CREATE INDEX idx_name ON users (name);

Необходимо также помнить, что создание слишком большого количества индексов может привести к увеличению размера базы данных и замедлению операций записи данных. Поэтому важно анализировать запросы и выбирать наиболее оптимальные индексы для конкретной ситуации.

Также стоит регулярно анализировать выполнение запросов с помощью инструментов для профилирования базы данных, чтобы выявлять узкие места и оптимизировать их.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно