В реляционных базах данных условие (или предикат) в запросе считается настраиваемым, если механизм СУБД может использовать индекс для ускорения выполнения запроса. Этот термин образован от сокращенного слова Search ARGument ABLE .
Запрос, который не может быть настроен для сортировки, известен как запрос, не поддерживающий сортировку, и обычно оказывает негативное влияние на время запроса, поэтому один из шагов в оптимизации запроса - преобразовать их в сегментированный запрос. Эффект аналогичен поиску определенного термина в книге без указателя, каждый раз начиная с первой страницы, вместо перехода к списку конкретных страниц, указанных в указателе.
Типичная ситуация, при которой запрос SQL становится несаргируемым, - это включение в предложение WHERE функции, работающей со значением столбца. Предложение WHERE - не единственное предложение, в котором может иметь значение саргентность; он также может влиять на предложения ORDER BY, GROUP BY и HAVING. Предложение SELECT, с другой стороны, может содержать выражения, не поддерживающие саргетинг, без отрицательного влияния на производительность.
- Операторы Sargable:
=, >, <, >=, <=, BETWEEN, LIKE, IS [NOT] NULL
- Операторы Sargable, которые редко повышают производительность:
<>, IN, OR, NOT IN, NOT LIKE
Простой пример
WHERE
предложения, которые можно настраивать, обычно имеют значения полей слева от оператора, а скалярные значения или выражения - справа от оператора.
Не подлежит сомнению:
ВЫБРАТЬ * ИЗ myTable ГДЕ 11.7 < SQRT ( myIntField )
Это невозможно, потому что myIntField встроен в функцию. Если бы в myIntField были доступны какие-либо индексы, их нельзя было бы использовать. Кроме того, будет вызываться для каждой записи в myTable.SQRT()
Саргированная версия:
ВЫБРАТЬ * ИЗ myTable ГДЕ myIntField > 11,7 * 11,7
Это возможно, потому что myIntField НЕ содержится в функции, что делает любые доступные индексы на myIntField потенциально пригодными для использования. Более того, выражение оценивается только один раз, а не для каждой записи в таблице.
Смотрите также
Рекомендации
- Настройка производительности SQL , Питер Гулуцан, Труди Пельцер (Аддисон Уэсли, 2002) ISBN 0-201-79169-2 ( Глава 2, Простые «поиски» )
- Внутреннее устройство Microsoft SQL Server 2012 Кален Делани, Коннор Каннингем, Джонатан Кехайас, Бенджамин Неварес, Пол С. Рэндал (О'Рейли, 2013 г.) ISBN 978-0-7356-5856-1 (Глава 11, Оптимизатор запросов)