2015-03-13 4 views
4

В литературе я прочитал, что с использованием условия ИЛИ или оператора в предложении WHERE делается оператор non-sargable. Я не знаю, почему и как это может быть правдой. Любая помощь будет оценена по достоинству.Почему «ИЛИ операция» или условие ИЛИ не могут быть отклонены?

+3

Википедия - источник ... – jarlh

+1

Wikipedia - открытая платформа. В Википедии есть потенциал для сбора источников, но, учитывая, что так легко менять эти источники, манипулировать ими или иным образом возвращать их, это делает сборку жидкости без надзора. Поэтому я не согласен. – LearnByReading

+1

Есть также отличные администраторы и модераторы, которые отлично справляются с управлением источниками. Но мы немного отвлечемся от темы: D Не могли бы вы рассказать мне, что означает несогласие? – Phate01

ответ

3

Ответ предоставлен автором авторитетной книги по оптимизации SQL Server Query Performance Tuning, Grant Fritchey. Итак, вот оно:

«Операторы OR гораздо более оптимизированы, чем раньше, но если вы думаете об этом, если у меня есть индекс, и я хочу сопоставить значения, равные A или Z, движок должен выполнять несколько сравнений, а не просто один. Полные условия все приводят к прямому поиску точки или поиску диапазона. Таким образом, A будет ходить по дереву и извлекать одну строку или набор строк из индекса для это значение. Но если это A или R, он не может получить диапазон, он должен выполнять другие виды работы. Иногда вы увидите, что это делается как два файла с операцией JOIN. И это здорово. Посмотрим на дополнительные операции с фильтром или сканирование, так что это невозможно. (опять же, кредит принадлежит автору)

+0

Я предлагаю вам перестать думать об этом и изучить план выполнения. Включает ли определение * nonsargable * «двигатель должен делать несколько сравнений»? –

+0

Я не планирую стать оператором SQL Server. Я бы предпочел понять основы и концепции и стать дизайнером, в отличие от оператора/технолога. – LearnByReading

+0

Ну, дизайнеры, как ожидается, доставляют проекты, которые хорошо работают. Вы можете посмотреть план выполнения и заметить, что запрос с использованием оператора 'или' действительно использует индекс. (Это не мое мнение, это факт.) Входит ли в определение * nonsargable * «двигатель должен делать несколько сравнений, даже если эти сравнения используют индекс»? –

Смежные вопросы