Вы передали бы этот простой SQL обратно для, переделывают?

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

Веб-страница динамично создает SQL для выполнения на основе вводимых параметров. Например, если пользователь входит "1" для "Подразделения", мы создаем SQL как это:

SELECT * FROM FACT WHERE 
BUSINESS_UNIT = '1'
--AND other criteria based on the input params

Я нашел, что, где пользователь не указывает BUSINESS_UNIT, следующий запрос создается

SELECT * FROM FACT WHERE 
BUSINESS_UNIT LIKE '%'
--AND other criteria based on the input params

По моему скромному мнению, это излишне (если не чрезвычайно) неэффективно и ордеры, отправляющие код плохо за модификацией, но так как у меня есть намного более высокий уровень передачи обратно кода для, переделывают, чем другие, я полагаю, что могу зарабатывать репутацию, как являющуюся "слишком придирчивым".

Если это - несоответствующий вопрос, потому что это не прямое кодирование Q, сообщите мне, и я сразу удалю его. Я очень смущен, позволяются ли субъективные вопросы как это или нет! Я буду следить за Вашими ответами.

ty


Обновление:

Я использую базу данных Oracle.

Мое впечатление - то, что Oracle не оптимизирует "КАК '%'" путем удаления условия и что оставление внутри его менее эффективно. Кто-то мог подтвердить?

8
задан skaffman 23 March 2012 в 10:47
поделиться

6 ответов

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

Другими словами,

SELECT * FROM FACT WHERE 
BUSINESS_UNIT LIKE '%'

и

SELECT * FROM FACT

создали тот же план запроса. Таким образом, не должно быть разница в производительности (в зависимости от вашего двигателя DB, я думаю), хотя он выглядит видно небрежно.

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

9
ответ дан 5 December 2019 в 05:34
поделиться

Две запросы совершенно разные (с точки зрения набора результатов)

SELECT * FROM FACT;

и

SELECT * FROM FACT WHERE  
BUSINESS_UNIT LIKE '%';

Первое вернет все строки, второе, если есть NULL Значения этих строк Не будет возвращено, потому что ничего по сравнению с NULL - это NULL , и поэтому не удовлетворяет предикату. Вот как это будет работать в Oracle.

14
ответ дан 5 December 2019 в 05:34
поделиться

Я бы отправила его обратно, и мне нравится вопрос.

Вся обзор кода в некоторой степени субъективный. Критерии должны основываться на ряде факторов.

  • это работает.

  • соответствует ли он разумным ожиданиям производительности, ремонтопригодности, удобства использования и масштабируемости

, в то время как я не проверял эту конкретную конструкцию - я подозреваю (как и) Этот код будет делать ужасные вещи на ваш SQL Server. Таким образом, производительность и масштабируемость вызывается под сомнение.

1
ответ дан 5 December 2019 в 05:34
поделиться

Писатель хотел фиктивное утверждение, чтобы он мог добавить «и» на все последующие заявления. Изменение его до лучшего утверждения «NO-OP», как 1 == 1, поможет. Или они могли бы сделать немного больше работы и вставлять «где» разумно.

1
ответ дан 5 December 2019 в 05:34
поделиться

Выберите * - красный флаг. Укажите список столбцов для запроса.

2
ответ дан 5 December 2019 в 05:34
поделиться

Этот запрос, с Business_unit, как «%» , не выглядит довольно эффективным - полагаю, что он заставит полное сканирование таблицы ...

Итак, да, Я бы попытался сделать этот запрос переработанный, чтобы справиться с такой ситуацией - или, по крайней мере, я бы сообщил об этой проблеме через нашу ошибку трекера (не уверен в приоритете I Узнал бы, но все же проблема будет войти в систему где-то, и кто-то исправит это когда-нибудь, когда нет проблем с высоким приоритетом для решения) .

2
ответ дан 5 December 2019 в 05:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: