Подбирая из вашего комментария: "Я просто хочу знать, является ли начало с совпадением разным с конца с совпадением".
Во-первых, помните, что мы не ищем лучший алгоритм для сопоставлениястрока.Мы ищем лучший алгоритм, чтобы найти все подходящие строки в наборе из N строк.Мы хотим работать лучше, чем «Делать алгоритм X, N раз».
Если имя поля НЕ проиндексировано, то разница в производительности между этими двумя запросами будет очень небольшой - движок SQL просто собирается выполнитьсовпадать с первыми 3 или последними 3 байтами строки, что является просто вопросом смещения в правильную ячейку памяти.
Если имя поля IS проиндексировано, между двумя поисками будет огромная разница в производительностипотому что вместо проверки всех N строк мы можем отбросить большую часть данных.
т.е. для версии "xyz%" мы можем использовать бинарный поиск.
Начнем с серединыэлемент, который, как оказалось, «Питер».Мы можем немедленно отбросить все до 'peter' и получить средний элемент для остатка - 'samantha' и так далее, пока не найдем записи, начинающиеся с 'xyz'.
С версией "% xyz" мы не можем этого сделать, поскольку ЛЮБАЯ строка может потенциально совпадать в конце, нам нужно просмотреть каждую строку.
По мере увеличения размера нашей таблицы разница между этими двумя подходами становится большой.
Решение по созданию поля / индекса для обратного имени поля позволяет нам снова использовать технику двоичного поиска.(В некоторых базах данных это возможно сделать без создания дополнительного поля, но с использованием определенных типов индексов, виртуальных столбцов и т. Д.).
Это значительно упрощается - для получения подробной информации о фактической реализации базы данныхиндексы, посмотрите на B-Tree и B * Tree индексы.