В случае «передней карты» (т. Е. Предиката «LIKE '% ...'»), как здесь имеет место, INSTR и LIKE должны работать примерно одинаково .
Когда подстановочный знак равен , а не"передним подстановочным знаком", подход LIKE должен быть более быстрым, если только подстановочный знак не является слишком избирательным.
Причина , почему тип подстановочного знака и его селективность имеют значение , заключается в том, что предикат с INSTR () систематически приведет к сканированию таблицы (SQL не может делать никаких предположений о семантике INSTR), благодаря чему SQL может использовать свое понимание семантики предиката LIKE, возможно, для использования индекса, чтобы помочь ему только тестировать сокращенный набор возможных совпадений.
Как предлагается в комментарии к самому вопросу, Полнотекстовый индекс будет намного быстрее . Разница зависит от конкретного распределения слов в тексте, а также от общего размера таблицы и т. Д., Но ожидайте чего-либо от вдвое быстрее, может быть, в 10 раз быстрее.
Возможным недостатком использования полнотекстового индекса в дополнение к общим накладным расходам на создание такого индекса является то, что, если только вы не будете очень осторожны при настройке этого индекса (например: определение списка стоп-слов, использование специального синтаксиса поиска, чтобы избежать инфлективные формы и тому подобное ...), могут быть случаи, когда результаты, предоставленные FullText, будут не такими, как ожидалось . Например, в поисках «ПИЛА» (инструмент для резки дерева) можно получить много обращений к записям, включая глагол «видеть» в его различных сопряженных формах.
Конечно, эти лингвистические функции полнотекстовых индексов обычно могут быть переопределены, и также можно считать, что такие функции являются преимуществом, а не недостатком. Я просто упомянул это здесь, так как мы сравниваем это с простым поиском по шаблону.