Sargable - Sargable
Эта статья поднимает множество проблем. Пожалуйста помоги Улучши это или обсудите эти вопросы на страница обсуждения. (Узнайте, как и когда удалить эти сообщения-шаблоны) (Узнайте, как и когда удалить этот шаблон сообщения)
|
В реляционные базы данных, условие (или предикат) в запросе называется сомнительный если СУБД двигатель может воспользоваться показатель чтобы ускорить выполнение запроса. Термин происходит от сокращения Искать ARGument ABLE.
Запрос, не поддающийся сортировке, известен как несаргируемый запрос и обычно отрицательно влияет на время запроса, поэтому один из шагов в оптимизация запросов заключается в том, чтобы сделать их доступными для продажи. Эффект аналогичен поиску определенного термина в книге без указателя, каждый раз начиная с первой страницы, вместо перехода к списку конкретных страниц, указанных в указателе.
Типичная ситуация, в которой SQL запрос non-sargable - это включить в предложение WHERE функцию, работающую со значением столбца. Предложение WHERE - не единственное предложение, в котором может иметь значение саргентность; он также может влиять на предложения ORDER BY, GROUP BY и HAVING. Предложение SELECT, с другой стороны, может содержать выражения, не поддерживающие sargable, без отрицательного влияния на производительность.
- Операторы Sargable:
=, >, <, >=, <=, МЕЖДУ, ЛЮБИТЬ, ЯВЛЯЕТСЯ [НЕ] ЗНАЧЕНИЕ NULL
- Операторы Sargable которые редко улучшают производительность:
<>, В, ИЛИ, НЕ В, НЕ ЛЮБИТЬ
Простой пример
ГДЕ
предложения, которые можно изменять, обычно имеют значения полей слева от оператора, а скалярные значения или выражения - справа от оператора.
Не подлежит сомнению:
ВЫБРАТЬ*ОТmyTableГДЕ11.7<SQRT(myIntField)
Это невозможно, потому что myIntField встроен в функцию. Если бы в myIntField были доступны какие-либо индексы, их нельзя было бы использовать. К тому же, SQRT()
будет вызываться для каждой записи в myTable.
Саргированная версия:
ВЫБРАТЬ*ОТ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, Оптимизатор запросов)