Заменяет ли Dynami c AND на Like поиск? - PullRequest
0 голосов
/ 10 марта 2020

Я хочу, чтобы запрос MYSQL создавался во время компиляции. Есть несколько предложений AND, которые я хочу, чтобы они динамически добавлялись к запросу на основе необязательных входных параметров, которые будут известны во время выполнения.

Поэтому я планирую выполнить LIKE-поиск вместо динамической конкатенации AND.

Представьте, что у меня есть значение под названием 'Ramakrishna', запрос выглядит как

  SELECT * from my_table WHERE col LIKE '%Ramakrishna%'

И когда для параметра нет значения, которое я хотел бы использовать, например search

  SELECT * from my_table WHERE col LIKE '%%'

Я хочу сделать это для 15 параметров в моем запросе. Я не хочу делать это для огромного запроса, если я не знаю тенденцию производительности этого метода. Это будет очень дорого?

Ответы [ 2 ]

1 голос
/ 11 марта 2020

Построить запрос динамически. Период.

  • Создавая запрос, вы включите оптимизации, которые может пропустить Оптимизатор.

  • Издержки построения запроса могут быть меньше чем MySQL пытается проанализировать и оптимизировать запрос.

  • Имейте в виду, что LIKE с лидирующим подстановочным знаком не оптимизируется. Подумайте, как этого избежать.

  • Имеют несколько многоколоночных («составных») индексов, которые помогут со столбцами, которые обычно ищут. Это будет лучшая оптимизация.

0 голосов
/ 10 марта 2020

если вы можете создать словарь с 15 параметрами, то

with par as (
      select name_par
      from params
     )
select *
from my_table, par
where col LIKE par.name_par 
...