Распределенная компиляция запросов 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Распределенная компиляция запросов



Запросы на языке SQL до своего реального выполнения могут подвергаться компиляции. Компиляция запросов может производиться на стадии предкомпиляции прикладной программы, написанной на обычном традиционном языке программирования с включением предложений SQL, или в процессе выполнения транзакций с использованием инструкции языка SQL. С точки зрения пользователя процесс компиляции приводит к следующим результатам: для каждого предложения на SQL образуется программа в машинных кодах, вызовы которой помещаются в текст исходной прикладной программы, однако в действительности процесс компиляции запроса намного более сложен из-за наличия сложных сетевых взаимодействий, которые требуются при реальном выполнении транзакции. Будем называть главным узлом сети тот узел, в котором инициирован процесс компиляции предложений SQL, и дополнительными узлами (те узлы, которые вовлекаются в этот процесс в ходе его выполнения). На самом грубом уровне процесс компиляции можно разбить на следующие стадии:

1) В главном узле сети производится грамматический разбор предложения SQL с построением внутреннего представления запроса в виде дерева. На основе информации из локального каталога главного узла и удаленных каталогов дополнительных узлов производится замена имен объектов, фигурирующих в запросе, на их системные идентификаторы.

2) В главном узле генерируется глобальный план выполнения запроса, в котором учитывается только порядок взаимодействия узлов при реальном выполнении запроса. Глобальный план отображается в преобразованном соответствующим образом дереве запросов.

3) Если в глобальном плане выполнения запроса участвуют дополнительные узлы, производится его декомпозиция на части, каждую из которых можно выполнить в одном узле. Например, локальная фильтрация отношения в соответствии с заданным условием, при которой соответствующие части запроса рассылаются в соответствующие дополнительные узлы.

4) В каждом узле, участвующем в глобальном плане выполнения запроса, в главном или дополнительном, выполняется завершающая стадия компиляции. Эта стадия включает по существу две последние фазы процесса компиляции запроса: оптимизацию и генерацию машинных кодов, производится проверка прав пользователя, от имени которого выполняется компиляция, на выполнение соответствующих действий. Происходит обработка представлений БД, осуществляется локальная оптимизация обрабатываемой части запроса в соответствии с имеющимися индексами и производится генерация кода.

Язык реляционных баз данных SQL

Структурированный язык запросов SQL был разработан в 1970 г. корпорацией IBM как язык управления реляционных баз данных. До него и после него были попытки создания альтернативных языков, но стандартом стал именно SQL. Практически все производители систем управления БД используют в своих продуктах, ту или иную модификацию SQL.

С 1970 г. было разработано много версий этого языка, часто несовместимых друг с другом. В результате в 1992г. американским национальным институтом стандартов был разработан стандарт SQL-92, описывающий поведение серверов БД и регламентирующий основные правила работы. Целью разработки этого стандарта было уменьшение несовместимости различных версий SQL. Однако, несмотря на усилия и попытки добиться единого стандарта, каждый из производителей использует и развивает свою модификацию SQL. Microsoft SQL сервер реализован вариантом transact SQL, поддерживающий большинство способностей SQL-92 и ряд дополнений, увеличивающий гибкость и мощность языка.

Идентификаторы

Все объекты MS SQL сервер имеют свои собственные имена, с помощью которых можно ссылаться на них.

Имена объектов называются идентификаторами. Любой объект БД должен быть уникально идентифицирован. Transact SQL налагает ряд ограничений наименований объектов:

1) Первый символ имени объекта должен быть одним из символов латинского или национального алфавита, либо символом подчеркивания. Т.е. не допускается использование в качестве первого символа имени объекта цифр и некоторых других знаков (*,!,?…). Для обозначения объектов сервер разрешает использование символов @, # для именования временных таблиц и хранимых процедур. Временные объекты существуют только в течении сеанса или транзакции, а за тем уничтожаются. Для обозначения глобальных временных объектов, к которым могут обращаться все пользователи Transact SQL позволяет использовать символы @@, ##. Некоторые функции и переменные начинаются с символа @@.

2) Основная часть идентификатора может включать любые символы, десятичные цифры, подчеркивание, решетки и т. д.

3) При выборе имени следует убедиться, что оно не является зарезервированным словом, и что не существует объект с таким именем. Transact SQL не различает регистров, в которых набраны символы и поэтому считает одинаковыми имена объектов в разных регистрах.

4) Запрещено использование внутри имени пробелов, круглых скобок и спец. символов.

5) Длина имени объекта не должна превышать 128 символов. Исключения составляют имена временных таблиц, длина имени которых не должна превышать 116 символов. Для обхода некоторых ограничений можно заключать имена объектов в двойные кавычки или квадратные скобки. В этом случае разрешается использование в имени объекта пробелов, спец. символов и символов зарезервированных слов.

Идентификаторы, заключающиеся в двойные кавычки или квадратные скобки, называются ограниченными идентификаторами.

Выражения

Выражения SQL сервер представляют собой комбинацию идентификаторов, функций, логических и арифметических операций, констант и других объектов.

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

Операнды SQL сервер делится на следующие типы:

1) Константы - постоянные величины, значения которых не могут быть изменены.

2) Функции – именованные программы, выполняющие обработку данных и в некотором случае возвращающие определенный результат. Функции реализуют наиболее часто выполняемые алгоритмы, что избавляет пользователей от многократного написания одного кода.

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

4) Переменная - именованная область памяти определенного объема, в которой хранятся данные. Фактически любая переменная- это последовательность из одного или несколько байт. То, как сервер будет обрабатывать последовательность, представленную значением переменной зависит от типа данных, ассоциированной с этой переменной.

5) Подзапрос - в качестве выражения можно указать подзапрос, который подготавливает соответствующий набор данных. По принципу работы это эквивалентно указанию колонки таблицы только в случае подзапроса. Данные не дано явно закачивать в таблицу. Сервер сам создает временную таблицу с необходимой структурой, копируя в нее выбранные данные, и подключает полученный набор данных в качестве выражения. Выполняемые действия задаются с помощью операторов, которые делятся на типы:

1)– простейшие (унарные) операторы работают только с одним операндом. Простейшие операторы могут быть использованы с любыми величинами числового типа, как с числовыми, так и с дробными.

2)– оператор присваивания используется для присваивания переменной определенного значения, полученного в результате вычисления выражения. В SQL-сервер единственным оператором присваивания является знак равенства (=), который также используется в операторе сравнения.

DECLARE @@ variable int

SET @@ variable=10

3)– арифметические операции - это бинарные операции, выполняемые с операндами, имеющими числовой тип данных. К ним относят *, /, +, -, %. Арифметические операторы возвращают значения того же типа, что и входные.

4)– строковые - единственные операции, которые можно непосредственно производить над операндами символьного типа - конкатенация (сложение). Для обозначения конкотенации строк используется знак «+».

– Сравнение.

Операторы сравнения могут дать информацию о сравнительной величине операндов. Допускается использование следующих логических операндов: равно «=», больше «>», меньше «<», меньше пли равно «<=», больше или равно «>=>>, не равно «!=>> или «<>>>, не менее чем «!<», не более чем «!>». Результатом выполнения логического операнда будет значение «истина» (TRUE), если условие выполняется, или «ложь» (FALSE) в противном случае. Если сравнение невозможно (например, в случае несовпадения типов), то возвращается неопределенное значение NULL.

– Логические операторы.

Операторы этого типа возвращают значения TRUE или FALSE и могут быть использованы в различных конструкциях, включая запросы. Логические операторы могут быть представлены в виде нескольких опера­торов сравнения и являются своего рода надстройкой над ними.

В Transact SQL есть следующие операторы:

ALL -выполняет сравнение для набора данных. Если условие выполнено для всего набора данных, возвращается значение TRUE.

AND - оперирует с двумя булевыми выражениями. Только если оба выражения истинны (TRUE), возвратится значение TRUE.

ANY -выполняет сравнение для набора данных. Если условие выполнено, хотя бы для одного элемента из набора данных, возвращается значение TRUE.

BETWEEN - проверяет, лежит ли значение в указанном диапазоне.

EXIST – возвращает TRUE, если подзапрос возвращает хотя бы одну строку. Та­ким образом, этот оператор проверяет существование данных.

IN -возвращает TRUE, если значение входит в указанный список.

LIKE - проверяет значение на «похожесть» по указанному шаблону.

NOT - инвертирует значение булева типа, то есть заменяет TRUE на FALSE и наоборот.

OR -возвращает TRUE, если хотя бы один из двух операндов равен TRUE.

SOME - выполняет сравнение для набора данных. Если условие выполнено для одного элемента из набора данных, возвращается значение TRUE. Аналог ANY.

Типы данных

Понятие типа данных в SQL Server полностью адекватно понятию типа данных в современных языках программирования. Тип данных определяет диапазон значений, которые можно сохранить в переменной или колонке таблицы.

1) Числовые целые типы данных.

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

К целочисленным типам данных (общее название — integer) относятся следующие типы данных:

Int (или Integer) - для хранения данных используются 32 бита или 4 байта;

Small int - для хранения данных используются 16 бит, или 2 байта;

Tinyint - этот целочисленный тип занимает всего 1 байт и не содержит отрицательных чисел. Все биты интерпретируются как числовое значе­ние. Тип данных tinyint позволяет хранить значения в интервале от 0 до 255.

При выборе того или иного типа данных необходимо исходить из физических значений хранимых данных. Целочисленные типы данных используются для построения индексов и первичных ключей.

2) Нецелочисленные типы данных.

Числа, в составе которых есть десятичная точка, называются нецелочисленными. Microsoft разделяет нецелочисленные данные на два типа — десятичные (decimal) и приблизительные (approximate).

Десятичные данные физически хранятся в SQL Server 7.0 не в виде чисел, а в виде последовательности цифр. Для представления каждой десятичной цифры обычно используются 4 бита, то есть один байт позволяет хранить две десятичных цифры, или значение от 0 до 99.

Денежные типы данных.

Денежные типы данных обеспечивают хранение значений до 4-х знаков после запятой.

Maney - 8 байт;

Smallmaney - 4 байта.



Поделиться:


Последнее изменение этой страницы: 2017-02-19; просмотров: 231; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.117.9.186 (0.025 с.)