Процессор запросов
Процессор запросов обеспечивает обработку команд на языке Transact-SQL - одном из диалектов стандартного языка за-просов. К числу наиболее важных новых возможностей, которые обеспечивает процессор запросов, относятся следующие:
Использование более одного индекса на таблицу.
В предыдущих версиях оптимизатор запросов мог использовать не более одного индекса на каждую таблицу, участвующую в запросе. Теперь это ограничение снято, и оптимизатор может пользоваться несколькими индексами, например, если условие поиска в запросе задано одновременно по нескольким полям. Над индексами могут осуществляться теоретико-множественные операции, например, объединение или пересечение индексов, что упрощает обработку предикатов фильтрации с операторами or или and, а также может применяться для динамического создания покрывающего индекса.
Новые способы соединения таблиц в запросах (JOIN).
Наряду с традиционным алгоритмом разрешения соединения таблиц (JOIN) - вложенным циклом (nested loop), оптимизатор может теперь применять и новые, зачастую более эффективные стратегии -
слияние (merge join) и хеширование (hash join)
.
Слияние
применяется, когда обе соединяемые таблицы отсортированы по ключу соединения.
Хеширование
применяется, когда индексы задействовать не удается. Оптимизатор запросов сам определяет наиболее эффективную стратегию для каждого запроса.
Распределенные и гетерогенные запросы.
В версии 7.0 процессор запросов обращается за данными к
системе хранения (Storage Engine)
через интерфейс OLE DB. Через этот же интерфейс он может обращаться за данными и к любым другим OLE DB-совместимым источникам данных - как локальным (находящимся на этом же компьютере), так и удаленным. Таким образом, стандартные операторы SELECT, INSERT, UPDATE и DELETE могут теперь в одном запросе соединять таблицы из разных источников данных. Этими источниками данных могут быть как Microsoft SQL Server, так и другие СУБД, а также нереляционные источники данных, например Exchange Server, Index Server и др. В зависимости от возможностей OLE DB-провайдера возможны три варианта обращения к удаленным данным - только чтение удаленных данных, их изменение и включение изменений в распределенную транзакцию. При этом изменение локальных данных возможно в рамках распределенного запроса в любом случае.
Разделяемые планы запросов.
Разные запросы разных пользователей теперь могут использовать одни и те же планы выполнения, хранящиеся в специальном кэше. При этом запросы должны совпадать не полностью, а с точностью до определенных параметров. Параметры либо выделяются автоматически (для простых запросов), либо задаются в явном виде. Кроме параметризуемых запросов повторно используемые планы создаются для хранимых процедур, а также для запросов, подготовленных при помощи соответствующих вызовов API.
Полнотекстовый поиск.
SQL Server обеспечивает возможности полнотекстового поиска за счет интеграции с системой полнотекстового индексирования, используемой также в Index Server и Site Server. Взаимодействие с этой системой осуществляется через OLE DB. Управление построением и поддержкой индексов осуществляется из главного средства администрирования SQL Server - SQL Enterprise Manager. Полнотекстовые индексы хранятся за пределами баз данных SQL Server - в специально отведенных файловых каталогах. Обновление индексов осуществляется вручную или по расписанию. Построение индекса возможно по символьным и текстовым полям таблиц. Поиск (SELECT) с использованием полнотекстового индекса осуществляется при использовании двух специальных функций - CONTAINS() и FREETEXT().