MySQL LIKE, влияние дополнительных подстановочных знаков на производительность

Скажем, у меня есть набор строк базы данных, содержащих такие данные, как:

  • Бла1-Бла2-Бла3
  • Бла1-Бла3-Бла2

Будет ли запрос LIKE с использованием «Blah1-%» быстрее / медленнее, чем запрос с использованием «Blah1 -% -%». Очевидно, что в моем примере они получат обе строки, но, надеюсь, вы поймете, откуда я; лучше ли включить в запрос всю имеющуюся у вас информацию о том, что содержит строка, или опустить информацию, если это возможно.

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


person Jamie Robinson    schedule 05.07.2017    source источник
comment
мы говорим здесь о свободном текстовом поле?   -  person jimmy8ball    schedule 05.07.2017
comment
Да, мы! Хотя если есть способ лучше хранить данные для такого типа поиска ...?   -  person Jamie Robinson    schedule 05.07.2017
comment
если значения, входящие в эти поля, представляют собой свободный текст, тогда индекс действительно не поможет, хотя я могу сказать, что любые сравнения строк будут тяжелее для оптимизатора запросов, если вы проверяете значение в любом месте строки, чем скажем, тестирование начало строки. - Я бы посоветовал, где это возможно, составить заранее определенный список выбираемых значений, которые вместо этого можно проиндексировать?   -  person jimmy8ball    schedule 05.07.2017


Ответы (1)


"Blah1-%-%" не найдет "Blah1-foo", но другой найдет. Помимо этого ...

Основное время, затрачиваемое на запрос, - это выборка строки, особенно если она должна быть красной с диска, и ее анализ. Стоимость любых выражений, включая LIKE с дополнительным подстановочным знаком, незначительна.

Все, что оптимизатор делает с LIKE, это решает, начинается ли он с подстановочного знака (тем самым не разрешая индекс) или нет (тем самым позволяя оптимизатору рассмотреть индекс).

person Rick James    schedule 08.07.2017