Лучше иметь операторы case в предложении where или построить динамический запрос - PullRequest
0 голосов
/ 29 августа 2018

Я создаю запрос к результатам поиска, объединяющий несколько таблиц с миллионами записей. Db - это mysql.

Хотя мои условия соединения с таблицами остаются неизменными всегда, мои операторы условия where действительно зависят от параметров, выбранных пользователем из пользовательского интерфейса.

Вариант 1:

   WHERE table.column1 = something 
   AND
   table.column2 = CASE WHEN condition1 = 0 THEN table.column 
                          ELSE condition1 END 

Case2: создайте динамический запрос, который добавляет условие AND в зависимости от критериев поиска.

Case1, похоже, требует больше времени для меня. Кто-нибудь из вас может предложить, какой из них взять, или есть какой-нибудь другой лучший способ справиться с динамическими условиями, в которых.

спасибо за помощь.

1 Ответ

0 голосов
/ 30 августа 2018

Типичная логика будет не использовать case, просто логическая логика:

WHERE table.column1 = something  AND
      (@condition1 = 0 OR table.column2 = @condition1)

IS NULL может часто использоваться вместо = 0 для сценария "все".)

Это лучше или хуже динамического SQL? По сути, это вопрос производительности. Если у вас есть индекс только на (column1), то он будет использоваться либо для динамического запроса, либо для логического (или case) логического запроса. Это не имеет значения.

Однако, если у вас есть индекс на (column1, column2), то приведенное выше, вероятно, не будет использовать индекс. Эквивалентная версия с использованием динамического SQL будет использовать индекс, поэтому выполнение запроса будет быстрее - если вы не выберете все значения.

В противовес этому вам необходимо сбалансировать составление запроса. Обычно это занимает некоторое время, но не так много. Если имеют значение миллисекунды, то имеет значение компиляция. Если десятки секунд имеют значение, то, вероятно, нет.

Итак, есть разные вещи, которые вам нужно сбалансировать. Нередко динамический SQL является наиболее эффективным вариантом, особенно при наличии нескольких условий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...