Язык Transact-SQL

Подкатегории

Хранимые процедуры и функции, определенные пользователем

В этом разделе вводятся описания пакетов и подпрограмм. Пакеты являются последовательностью операторов Transact-SQL и процедурных расширений. Подпрограммы могут быть либо хранимыми процедурами, либо функциями, определенными пользователем (User Defined Function, UDF). В начале главы вводятся все процедурные расширения, поддерживаемые Database Engine. После этого процедурные расширения используются вместе с операторами Transact-SQL, чтобы продемонстрировать, как могут быть реализованы пакеты. Пакет может быть сохранен как объект базы данных в виде хранимой процедуры или UDF. Одни процедуры написаны пользователями, другие предоставляются корпорацией Microsoft, они называются системными хранимыми процедурами. В отличие от пользовательских хранимых процедур функции, написанные пользователем, возвращают вызвавшей программе некоторое значение. Все подпрограммы могут быть написаны либо на Transact-SQL, либо на любом языке программирования, таком как С# или Visual Basic.

Просмотреть материалы...

Система безопасности Database Engine

Этот раздел начинается с краткого обзора наиболее важных концепций безопасности базы данных. Затем обсуждаются специфические особенности системы безопасности Database Engine. Аутентификация требует ответа на следующий вопрос: «Имеет ли этот пользователь легитимные права на доступ в систему?» Следовательно, эта концепция безопасности задает процесс проверки полномочий для предотвращения использования системы неавторизованными пользователями.

Просмотреть материалы...

Управление параллельной работой

Как вы уже знаете, данные в базе данных обычно используются многими программами пользовательских приложений. Ситуация, при которой несколько программ пользовательских приложений читают и пишут одни и те же данные в одно и то же время, называется конкурентным доступом. Следовательно, каждая СУБД должна иметь некоторый механизм управления для разрешения проблем конкурентного доступа. Высокий уровень конкурентного доступа возможен в системе базы данных, которая может управлять многими активными пользовательскими приложениями без их влияния друг на друга. И наоборот, система базы данных, где различные активные приложения влияют друг на друга, поддерживает низкий уровень конкурентного доступа. Этот раздел начинается с описания двух моделей управления конкурентным доступом, которые поддерживает Database Engine. В следующем разделе объясняется, как проблемы конкурентного доступа могут быть решены с использованием транзакций. Это обсуждение включает вводные сведения в четыре свойства транзакций, известные как свойства ACID (Atomicity, Consistency, Isolation, Durability- атомарность, согласованность, изолированность, устойчивость), обсуждаются связанные с транзакциями операторы Transact-SQL, вводится понятие протокола транзакции. Затем рассматривается блокировка и три основных свойства блокировки: модели блокировки, ресурсы блокировки, длительность блокировки. Также вводится важное понятие взаимной блокировки, которая может возникать как результат обычной блокировки.

Просмотреть материалы...

Системный каталог

В этом разделе рассматривается системный каталог Database Engine. За общими сведениями следует описание представлений для просмотра структуры некоторых каталогов; представления позволяют вам просматривать метаданные. В начале главы также рассматривается использование динамически управляемых представлений и динамически управляемых функций. А затем обсуждаются четыре альтернативных способа поиска информации метаданных: системные хранимые процедуры, системные функции, функции свойств и информационная схема.

Просмотреть материалы...

Индексы

В этом разделе описываются индексы и их роль в оптимизации времени отклика запросов. В первой части главы рассматриваются вопросы хранения индексов и существующие для этого формы. В основном глава содержит описание трех операторов Transact-SQL, имеющих отношение к индексам: create index, alter index и drop index. После этого рассматривается фрагментация индексов и ее влияние на производительность системы. Затем приводятся некоторые общие рекомендации по созданию индексов.

Просмотреть материалы...

Представления – View

Этот раздел посвящена исключительно объектам базы данных, называемым представлениями (view). Структура этой главы соответствует структуре, в которых были описаны операторы DDL и DML для базовых таблиц. В первом разделе этой главы рассматриваются операторы DDL, связанные с представлениями: create view, alter view и drop view. Затем описываются операторы DDL для представлений: select, insert, update и delete. Оператор select будет рассмотрен отдельно от других трех операторов. В отличие от базовых таблиц представления не могут быть использованы для операций модификации без некоторых ограничений.

Просмотреть материалы...

Триггеры

Этот раздел посвящен механизму, называемому триггерами. В начале главы описываются операторы Transact-SQL для создания, удаления и изменения триггеров. После этого даются примеры из различных областей приложений для этого объекта базы данных. Каждый пример создается с использованием одного из операторов insert, update или delete. Во второй части этой главы рассматриваются триггеры DDL, которые базируются на таких операторах, как create table. Опять же, даются примеры из различных областей приложений, связанных с триггерами DDL.

Просмотреть материалы...

Основные элементы SQL

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

Просмотреть материалы...

Язык описания данных

Этот раздел описывает все операторы Transact-SQL, связанные с языком определения данных DDL (Data Definition Language). Операторы DDL разделены на три группы, которые рассматриваются по порядку. Первая группа включает операторы, которые создают объекты, вторая группа включает операторы, которые изменяют структуру объектов, а третья группа включает операторы, которые удаляют объекты базы данных.

Просмотреть материалы...

Запросы к базе данных

В этом разделе вы изучите, как использовать оператор select для выполнения поиска данных. Здесь описывается каждое предложение этого оператора и даются многочисленные примеры с использованием базы данных sample для демонстрации практического использования каждого предложения. После этого рассматриваются агрегатные функции, множество операторов, вычисляемые столбцы и временные таблицы. Затем рассказывается более подробно о сложных запросах. Вводится оператор соединения таблиц. В дополнение к рассмотрению всех форм оператора соединения, который является наиболее важным оператором для реляционных систем баз данных, в главе рассматриваются коррелированные подзапросы и функция exists.

Просмотреть материалы...

Изменение содержимого таблиц

В дополнение к оператору select, который был описан, существуют три других оператора DML: insert, update и delete. Как и оператор select, эти три оператора модификации оперируют либо таблицами, либо представлениями. В данной главе обсуждаются эти операторы в работе с таблицами и даются примеры их использования. Дополнительно рассматриваются два других оператора: truncate table и merge. В то время как оператор truncate table является расширением в языке Transact-SQL стандарта SQL, оператор merge - новая и стандартизованная возможность в SQL Server 2008.

Просмотреть материалы...

Оценить
(1 голос)
Существуют три способа, которые можно использовать для пересоздания индекса: ♦ опция rebuild в операторе alter index; ♦ опция drop_existing в операторе create index; ♦ команда dbcc dbreindex. С опцией rebuild вы можете пересоздавать индекс. Если вы задаете all вместо имени индекса, все индексы указанной таблицы будут пересозданы. (Предоставляя возможность динамически пересоздавать индексы, вам не нужно будет их удалять и создавать заново.) Опция drop_existing в операторе create index позволяет улучшить производительность, когда пересоздается кластеризованный индекс для таблицы, которая также содержит и некластеризованный индекс. Опция указывает, что существующий кластеризованный или некластеризованный индекс должен быть удален и заданный индекс создан заново. Как вы…
Оценить
(1 голос)
Опция reorganize оператора alter index указывает, что страницы листьев соответствующей индексной структуры будут реорганизованы таким образом, чтобы физический порядок этих страниц соответствовал логическому порядку слева направо для узлов-листьев. Таким образом, эта опция удаляет фрагментацию индекса, повышая производительность, (reorganize заменяет команду dbcc dbreindex.)
Оценить
(2 голоса)
Опция disable делает существующий индекс неактивным. Каждый неактивный индекс является недоступным для использования, пока вы снова не переведете его в активное состояние. Обратите внимание, что неактивный индекс не изменяется при изменении соответствующих данных таблицы. По этой причине такие индексы должны быть полностью пересозданы, если вы хотите их снова использовать. Для активации неактивного индекса используйте опцию rebuild оператора alter table.
Оценить
(1 голос)
Оператор drop index удаляет один или более индексов из текущей базы данных. Обратите внимание, что удаление кластеризованного индекса может оказаться затратной по ресурсам операцией, потому что потребуется пересоздавать все некластеризованные индексы. (Все некластеризованные индексы используют индексные ключи кластеризованного индекса в качестве указателя в их индексных страницах листьев.) В примере 10.4 показано, как может быть удален индекс i_empno.   Оператор drop index имеет дополнительную опцию моуе то, которая является аналогом опции on в операторе create index. Другими словами, вы можете использовать эту опцию для указания места, куда нужно помещать строки данных, которые размещаются в страницах листьев кластеризованного индекса. Эти данные перемещаются…
Оценить
(1 голос)
Хотя Database Engine практически не имеет никаких ограничений, связанных с количеством индексов, все же рекомендуется ограничить их число по целому ряду причин. Во-первых, каждый индекс использует определенное количество дисковой памяти, следовательно, существует вероятность того, что общее количество индексных страниц может превысить количество страниц данных в базе данных. Во-вторых, в отличие от преимуществ использования индексов при поиске данных, добавления и изменения данных имеют прямое воздействие на поддержку индексов. Чем больше индексов в таблице, тем больше требуется реорганизаций индексов для таких операций. Практическое правило- выбирайте индексы разумно для часто выполняемых запросов, а позже оценивайте использование индексов. Этот раздел дает несколько рекомендаций по…
Оценить
(1 голос)
Если предложение where в операторе select содержит условие поиска с одним столбцом, вы должны создать индекс для этого столбца. Использование индекса в особенности рекомендуется, если селективность условия является высокой. Селективность условия определяется как отношение количества строк, удовлетворяющих условию, к общему количеству строк в таблице. (Высокая селективность соответствует меньшему значению этого отношения.) Наиболее успешная обработка поиска с использованием индексированного столбца может быть достигнута, если селективность условия составляет 5% или менее. Столбец не должен быть индексирован, если селективность условия равна 80% или более. В таких случаях для существующих индексных страниц будут нужны дополнительные операции ввода/вывода, что уменьшает любую экономию времени, достигаемую за…
Оценить
(1 голос)
В случае использования операции соединения рекомендуется индексировать каждый соединяемый столбец. Соединяемые столбцы обычно представляют первичный ключ одной таблицы и соответствующий внешний ключ другой или той же самой таблицы. Если вы задаете ограничения целостности primary key и foreign key для соответствующих соединяемых столбцов, то должен быть создан только некластеризованный индекс для столбца внешнего ключа, поскольку система неявно создает кластеризованный индекс для столбца PRIMARY key. В примере 10.6 показано создание индексов, которые будут использованы, если у вас есть запрос с операцией соединения и с дополнительным фильтром.     Для примера 10.6 рекомендуется создание двух отдельных индексов: для столбца emp_no в обеих таблицах…
Оценить
(2 голоса)
Как вы уже знаете, значительное повышение производительности может быть достигнуто, когда все столбцы запроса включены в индекс. В примере 10.7 показан покрывающий индекс.   В примере 10.7 в первую очередь из таблицы Address удаляется существующий индекс ix_Address_stateProvinceiD. На следующем шаге создается новый индекс, который дополнительно включает два других столбца, помимо столбца PostaiCode. В заключение оператор select в конце примера демонстрирует запрос, покрываемый индексом. Для этого запроса системе нет необходимости отыскивать данные в страницах данных, потому что оптимизатор может найти все значения столбцов в страницах листьев некластеризованного индекса.
Оценить
(2 голоса)
Database Engine позволяет создавать следующие специальные типы индексов: ♦ индексы для вычисляемых столбцов; ♦ индексы для представлений. В этом разделе обсуждаются вычисляемые столбцы; индексированные представления будут рассматриваться в следующей главе. Вычисляемый столбец - это столбец таблицы, который используется для хранения результата вычисления данных таблицы. Такой столбец может быть виртуальным или постоянным. В следующем подразделе описываются обе эти формы вычисляемых столбцов.
Оценить
(1 голос)
Вычисляемый столбец без соответствующего кластеризованного индекса является логическим, т. е. он физически не хранится на жестком диске. Следовательно, он вычисляется каждый раз, когда к строке осуществляется доступ. В примере 10.8 демонстрируется использование виртуальных вычисляемых столбцов.   Таблица orders в примере 10.8 имеет два вычисляемых столбца: total и shippeddate. Столбец total вычисляется с использованием двух других столбцов: price и quantity, тогда как столбец shippeddate вычисляется при использовании функции даты dateadd и столбца orderdate.
© 2019 serversql.ru. Все права защищены.