В случае «переднего подстановочного знака» (то есть предиката «LIKE '%...'»), как здесь, кажется, INSTR и LIKE должны работать примерно одинаково.
Когда подстановочный знак не является "передним подстановочным знаком", подход LIKE должен быть быстрее, если только подстановочный знак не является очень избирательным.
Причина, почему тип подстановочного знака и его селективность имеют значение, заключается в том, что предикат с INSTR() систематически приводит к сканированию таблицы (SQL не может делать никаких предположений о семантике подстановочных знаков). INSTR), в результате чего SQL может использовать свое понимание семантики предиката LIKE, чтобы, возможно, использовать индекс, чтобы помочь ему проверить только сокращенный набор возможных совпадений.
Как указано в комментарии к самому вопросу, полный текстовый индекс будет намного быстрее. Разница зависит от конкретного распределения слов в тексте, а также от общего размера таблицы и т. д., но ожидайте от двух до десяти раз более быстрого.
Возможным недостатком использования полнотекстового индекса, помимо общих накладных расходов на создание такого индекса, является то, что если кто-то не очень тщательно настроит этот индекс (например, определите список стоп-слов, используя специальный синтаксис поиска, чтобы избежать флективных форм и подобное...), могут быть случаи, когда результаты, предоставленные FullText, не будут такими, как ожидалось. Например, при поиске «SAW» (инструмент для резки дерева) можно получить множество совпадений с записями, включающими глагол «видеть» в его различных спряженных формах.
Конечно, эти лингвистически осведомленные функции полнотекстовых индексов обычно можно переопределить, а также можно считать, что такие функции являются фактически преимуществом, а не недостатком. Я просто упоминаю об этом здесь, поскольку мы сравниваем это с простым поиском по подстановочным знакам.
person
mjv
schedule
16.03.2010
column regexp 'mystring'
обычно быстрее лайка - person Seth   schedule 16.03.20105
голосов за тег like-operator. Могу ли я попросить вас предложить подобный sql в качестве синоним? - person Kermit   schedule 02.04.2013REGEXP
вы также можете попробоватьPOSITION ('mystring' in columnname) > 0
- person Takedasama   schedule 20.07.2017