double arrow

Использование индексов — до 20 мин

Теперь, когда вы знаете, как создавать индексы, рассмотрим использование индексов. Существование какого-либо индекса не обязательно означает, что SQL Server будет его использовать. Это зависит от самого индекса и используемого оператора SQL. Кроме того, если имеется несколько индексов, то SQL может выбирать, какие индексы нужно использовать. Когда оптимизатор запросов SQL формирует план исполнения, он выбирает индекс, который дает наиболее высокую производительность; обычно это индекс, использующий наименьшее число операций ввода-вывода и считывающий наименьшее число строк.

Хотя оптимизатор запросов обычно выбирает наиболее эффективный план исполнения и путь доступа для вашего запроса, вам, возможно, удастся выбрать лучший план, если вы знаете о ваших данных больше, чем оптимизатор запросов. Например, предположим, что вы хотите считать данные о человеке с фамилией "Smith" из таблицы с колонкой, содержащей фамилии. Статистика по индексу обобщается на основе этой колонки. Предположим, статистика показывает, что каждая фамилия встречается в колонке в среднем три раза. Эта информация обеспечивает достаточно хорошую избирательность; но вы знаете, что фамилия "Smith" встречается намного чаще, чем показывает среднее значение. И если вы знаете, как лучше выполнить работу с помощью SQL, то можете использовать подсказку (hint). Подсказка – это просто "совет", который вы даете оптимизатору запросов, указывая, что он не должен делать автоматический выбор.

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

· Сканирование таблицы. В некоторых случаях вы можете решить, что сканирование таблицы будет эффективнее, чем поиск в индексе и сканирование индекса. Сканирование таблицы более эффективно, если при сканировании индекса считывается более 20 процентов строк таблицы, например, когда 70 процентов данных имеют высокий уровень избирательности, а остальные 30 процентов – это фамилия "Smith."

· Какой индекс использовать. Вы можете указать, что определенный индекс будет единственным рассматриваемым индексом. Возможно, вы не знаете, какой индекс выберет оптимизатор запросов SQL Server без вашей подсказки, но предполагаете, что указанный в подсказке индекс даст лучшие результаты.

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

· Метод блокировки. Вы можете указать оптимизатору запросов, какой тип блокировки использовать при доступе к данным определенной таблицы. Если вы предполагаете, что оптимизатор запросов может выбрать неверный тип блокировки для данной таблицы, то можете указать, чтобы он использовал блокировку строк, блокировку страниц или блокировку таблицы.

Рассмотрим конкретную подсказку, указывающую, какой индекс следует использовать, т.е. индексную подсказку. В следующем примере показана индексная подсказка в операторе T-SQL (использовать индекс Region для данного запроса):

SELECT *FROM Customers WITH (INDEX(Region))

WHERE region = 'OR' АND city = 'PortlАnd'

Отметим, что перед индексной подсказкой указано ключевое слово WITH. Если вы хотите задать несколько индексов, чтобы их использовал SQL Server, перечислите их в операторе T-SQL, аналогичном следующему:

SELECT * FROM customers WITH (INDEX(Region, City, CompАnyName))

WHERE region = 'OR' АND city = 'PortlАnd'

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

Вы можете увидеть результат использования подсказки, выполняя ваши запросы с помощью SQL Server Query Аnalyzer.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



Сейчас читают про: