У меня есть запрос дб, это вызовет полное сканирование таблицы с помощью подобного пункта и натолкнулось на вопрос, на предмет которого мне было любопытно...
Какое из следующего должно работать быстрее в Mysql, или они оба работали бы на той же скорости? Сравнительное тестирование могло бы ответить на это в моем случае, но я хотел бы знать почему из ответа. Фильтруемый столбец содержит пару тысячи символов, если это важно.
SELECT * FROM users WHERE data LIKE '%=12345%'
или
SELECT * FROM users WHERE data LIKE '%proileId=12345%'
Я могу подойти по причинам, почему каждый из них мог бы выполнить другой, но мне любопытно знать логику.
При прочих равных условиях более длинные строки совпадений должны выполняться быстрее, поскольку это позволяет пропускать тестовые строки с большими шагами и выполнять меньше совпадений.
Пример алгоритмов сопоставления укусов см., Например, в Алгоритм Бойера Мура в Википедии .
Конечно, не все равно, поэтому я определенно проверил бы это.
Быстрая проверка, найденная в справочных документах mysql , следующий абзац:
Если вы используете ... LIKE '% string%' и строка длиннее трех символов, MySQL использует Turbo Boyer -Алгоритм Мура инициализирует шаблон для строки, а затем использует этот шаблон для более быстрого выполнения поиска.
Никакой разницы.Поскольку у вас есть знак% в начале вашего выражения LIKE, это полностью исключает использование индексов, которые могут использоваться только для сопоставления префикса a строки.
Так что в любом случае это будет полное сканирование таблицы.
В базе данных значительного размера (то есть такой, которая не помещается в ОЗУ на вашем сервере 32G), ввод-вывод - это самая большая стоимость с очень большим запасом, поэтому я боюсь, что алгоритм сопоставления строк с шаблоном не будет иметь значения. .