Какой SQL-оператор быстрее? (ИМЕЮЩИЙ, по сравнению с Где …)

С Java 6 ни поддержка @Depreated, ни флаг компилятора не помогут вам здесь. Единственное решение, которое сработало для меня, - отправить комментарий javadoc с тегом @deprecated (small caps) на устаревший метод:

/**
  * @deprecated overriding deprecated method
  */
@Override
public javax.xml.bind.Validator createValidator() throws JAXBException {...}

(пример из класса, который происходит из JAXBContext.)

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

40
задан Jonathan Leffler 1 December 2008 в 11:46
поделиться

4 ответа

В теории (теорией, которую я имею в виду Стандарт SQL ) говорится, что то, ГДЕ ограничивает набор результатов перед возвращением строк и НАЛИЧИЕМ, ограничивает набор результатов после обеспечения всех строк. Таким образом, ГДЕ быстрее. По Стандарту SQL совместимый DBMSs в этом отношении, только используйте НАЛИЧИЕ, где Вы не можете поставить условие ГДЕ (как вычисляемые столбцы в некотором RDBMSs.)

можно просто видеть план выполнения относительно обоих и проверить на себя, ничто не разобьет это (измерение для Вашего определенного запроса в Вашей определенной среде с Вашими данными.)

67
ответ дан Vinko Vrsalovic 23 September 2019 в 16:25
поделиться

Это могло бы зависеть от механизма. MySQL, например, применяется, НАЛИЧИЕ почти длятся в цепочке, означая, что нет почти никакой комнаты для оптимизации. От руководство :

пункт НАЛИЧИЯ применяется почти в последний раз, непосредственно перед тем, как объекты отправляются клиенту без оптимизации. (ПРЕДЕЛ применяется после НАЛИЧИЯ.)

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

9
ответ дан Eran Galperin 23 September 2019 в 16:25
поделиться

Два запроса эквивалентны, и Ваш оптимизатор запросов DBMS должен распознавать это и производить, производят тот же план запросов. Это не может, но ситуация довольно проста распознать, таким образом, я ожидал бы, что любая современная система - даже Sybase - будет иметь дело с ним.

пункты НАЛИЧИЯ должны использоваться для применения условий на функции группы, иначе они могут быть mvoed в ГДЕ условие. Например. если бы Вы хотели ограничить свой запрос группами, которые имеют КОЛИЧЕСТВО (DZIALU)> 10, скажем, то необходимо было бы поместить условие в НАЛИЧИЕ, потому что это действует на группы, не отдельные строки.

5
ответ дан Mike Woodhouse 23 September 2019 в 16:25
поделиться

Я ожидал бы, что оператор Where будет быстрее, но возможно, что они оптимизировали бы к точно тому же.

2
ответ дан ysth 23 September 2019 в 16:25
поделиться
Другие вопросы по тегам:

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