Разделы
Публикации
Популярные
Новые
Главная » Оптимизация производительности transact

1 2 3 4 ... 55

оптимизация производительности transact

Эта книга предназначена для программистов. Она написана, чтобы помочь раз-работчика.м создавать приложения, в которых используется Transact-SQL Она не об администрировании или проектировании баз данных, не о разработке клиентских приложений, она даже не о сервере и не об оптимизации производительности. Она посвящена разработке высококачественного Transact-SQL-кода не-зависи.мо от того, для каких приложений он создается. Когда я начал писать эту книгу, я преследовал следующие цели:

О быть макси.мально изобретательным, когда дело касается моделей кода, - я стремился не просто рассказать читателю, как что-либо делается, а еще и показать это;

О приводить полные примеры кода внутри текста глав, чтобы кни1у .можно было читать без компьютера или ко.мпакт-диска;

О использовать современные методы кодирования, уделяя особое внимание ANSI-coB.MecTH.vracTH, совре.менным возможностям кодирования и их расширению;

О выстраивать главы так, чтобы они были самодостаточными - как можно меньше зависели от объектов, со.зданных в других главах;

О показывать примеры реального, са.моценного кода;

О избегать повторения того, что уже подробно изложено в онлайновых изданиях, посвященных SQL Server;

О отмечать особенности Transact-SQL, отличающие его от других диалектов SQL, а не просто писать очередную книгу но ANSI SQL;

О отказываться от ненужных экранных копий и других наполнителей , часто используемых в компьютерной литературе;

О идти от простого к сложному в пределах каждой главы и книги в целом;

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

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



О примерах баз данных

в этой книге широко используются примеры баз дан]1ых из поставки SQL Server - Northwind и pubs. Почти всегда легко .можно будет определит!., какая база задействована в каждом при.мере, по ко.м.меитария.м или по само.му коду. База данных pubs нрнменяется чаще, че.м Northwind, поэтому, если нет пояснения или в случае сомнении, можно считать, что речь идет о pubs.

Обычно изменения этих баз данны.х производятся внутри транзакций, чтобы их можно было вернуть в первоначальное состояние, хотя из соображений безопасности стоит заново создавать их после каждой главы, где они изменялись. Сценарии для их создания (instnwnd.sql и instpubs.sql) находятся в папке \Install в корневом ката.1оге SQL Server.

Сокращенные результаты

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

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

Это все отвечает моей цели - сохранить полноту изложения, не утомляя читателя. В этой книге около 600 SQL-сценарнев. Надеюсь, что ни одно из сокращений не уменьшит ценность и полезность книги.

О формальностях

Другая моя претензия к колнгьготерной литературе - фор.малыюсгь ради формальности. Один худож]1ик заметил, что сложнее нарисовать хорошую изогнутую линию, чем нряму]о . Он имел в виду, что иногда труднее сделать то, что не описано в стандартах, че.м то, что определено правилами и не раз выполнялось. Чтобы нарисовать прямую линию, достаточно взять линейку. Формальные правила, особенно академические, облегчают процесс: написания некоторых типов книг, поскольку они в значительной стеггени преобразуют субъективную при-



Благодарности 21

роду творчества в нечто 6t);iec объектмииое. Они похожи на донолиптельиыс колеса iia велосипеде потенциального авгора, Нанисаине из творческого upoiaecca превращается в механический. Расставьте все палочки ]1ад Т, все точки над I, и половина дела сделана. Очевидно, это освобождает автора от необходимости принятия м]!ожества peiueiHul, которые и составляют творчесюиТ iipouecc. Это также превращает хорошие труды в скучные, похожие на учебники, книги, не более увлекательные, чем телефонный справочник.

Поэтому я не согласен с тем, что фор.мальное написание - лучишй способ создания технической литературы, что это высоки!! ста]1дарт и идеал, к кото-ро.му следует стремиться. Напротив, я прислушиваюсь к словам Марка Твена и сторонюсь излишеств . Я верю, что, покуда обычная речь не становится чересчур пошлой (признаю, впрочем, что это субъективное различие), техинче-скнй писатель должен писать так, как говорят ч]ггатели. Это тот способ общения, к которому люди более 11рнсг10Собле]!Ы - даже техническая интеллигенция, и это тот способ, с помощью которого они лучше всего обучаются и об.менива-ются идеями. Я не изобретал такой способ мышления - так пишет большинство моих любимых авторов - Марк Твеи, Джо Селко, Эр!1ест Хемингуэй, Роберт Хайнлайн, Эндрю Миллер, Оскар Уаилд, II, Дж, О'Рурк, Патрисня О'Коинор, Хотя нам]10го труднее структурировать и писать текст, который естественен и легко читается, это стоит усилий, если идеи, которые писатель пытается передать, будут поняты,

Поэто.му везде в этой кииге вы увидите, что ,\п10жество правил и псевдоира-внл формального иаписаиня были )aciJHipenbi, укорочены, перевернуты, а иногда вообще нарушены. Это сделано специально.

Благодарности

я хочу поблагодарить жепу, кото)ая не то-чько способствовала появлению моих книг, ио и сделапа их заслуживающими внимания. Эта книга - больше ее заслуга, чем моя. Я хотел бы поблагодарить Нейла Коня (Tseil Coy), который mhoj-o лет назад сделал из меня настоящего нрогра.\1.\н1Ста. Под опекой Нейла я познавал .мастерство создания ирогра.м.много обеспечения. Благодарю также Джо Селко (Joe Ceiko), декана факультета языка SQL, который был для меня хороши.м другом и ценпы.м источником информации в этом проекте. Я хочу выразить благодарность и уважение Джону Са ната (John Sarapata) и Томасу Холэдею (Thomas Holaday), кото)ые помогали мне приду.мывать название для ктптт (и приберегу название Sybase for Dummies для будущих книг, Джон). Благодарю рецензентов Kinini, особенно Вайну Снидер (Wayne Snyder), Джанлуку Оц (Gianluca Hotz), Пауля Оливири (Paul Olivieri) и Рона Тал.маджа (Ron Tahnage). Сердечно благодарю Джона Гхпондера (John Gmuender), Джо Голла-гэра (Joe Gallagher), Майка Мэссиига (Mike Massing) и Дэ1п1и Торпа (Danny Thorpe) за их хладнокровие и за то, что они по.могли мне оставаться в здравом у.ме. Приношу свои иоздра1!леиия и благодарность иревосходиой команде изда-

Syhase для ту1шц>. ~ Примеч. перса.



тельства Addison-Wesley - Maiioy Слотеру (IVIichael Slaughter), Марисе Мельт-сер (Marisa Meltzer), Дж. Картеру Шанклину (J. Carter Shanklin) и другим - их слишком много, чтобы всех перечислить. Особая благодарность Нэнси Кара-Саджер (Nancy Cara-Sager), другу, техническому рецензенту и издателю, которая уделяет .мне столько вре.мени. Ее неустанное внимание к деталям не раз спасало меня.

Об авторе

Виртуоз в области баз данных, Кен Хендерсон, живет в Далласе со своей женой, четырьмя детыми и собакой. Когда он не пишет программное обеспечение или книги, он любит наблюдать за тем, как растут его дети. Вы можете связаться с Кеном Хендерсоном по электронной почте - khen@khen.com.

От издательства

Ваши замечания, предложения, вопросы отправляйте по адресу электронной почты comp@piter.com (издательство Питер , компьютерная редакция). Мы будем рады узнать ваше мнение!

На веб-сайте издательства http: www.piter.com вы найдете подробную информацию о наших книгах.



Введение

в Transact-SQL

Самая большая трудность при изучсмши программирования на SQL - забыть о процедурном нрограммиропании.

Джо Селко

SQL - это lingua franca мира баз данных. В большинстве современных СУБД, включая SQL Server, основным языком запросов служит диалект SQL. Вы можете использовать SQL для создания объектов или выполнения различных действий с ними, например размещения и запрашивания данных. SQL не принадлежит ни одному из производителей, так что каждый из них волен приспосабливать язык так, чтобы как можно лучше выполнить пожелания своих клиентов. Несмотря на все это разнообразие существует .многостороннее соглашение, регла.ментирующее каждую реализацию. Обычно в качестве этого соглашения выступает стандарт ANSI/ISO SQL, который регулируется Национальным комитетом 110 стандартам в информационных технологиях (National Committee on Information Technology Standards, NCITS H2). Ha са.мом деле этот стандарт состоит из нескольких - каждый называется в соответствии с годом, когда он был принят. Каждый стандарт основывается на предыдуни^х, при этом добавляются новые возможности, совершенствуется синтаксис языка и так далее. Версия стандарта 1992 года - известная также как SQL-92 - вероятно, самая популярная вообще и наиболее популярная среди производителей СУБД. Как и в случае с други.ми языками, реализации SQL оцениваются по степени их coB.vie-стимости со стандартом ANSI/ISO. Большинство реализаций сов.мести.мы, по крайней .мере, с минимальны.ми спецификаниями SQL-92, хотя некоторые пошли дальше.

Transact-SQL - это реализация языка в Microsoft SQL Server. Она в значительной степени сов.местима с SQL-92, так что, если вы знакомы с разновидностью SQL другого производителя, вы, вероятно, почувствуете себя уверенно. Основная цель этого и.здания - помочь вам овладеть Transact-SQL, это важный шаг к тому, чтобы стать профессионалом в SQL Server. Книга начинается с краткого обзора основ языка.



ПРИМЕЧАНИЕ-----

В этой главе предполагается, что вы не знаете ничего или знаете очень мало о Transact-SQL. Еспи же вы уже немного знакомы с языком, можете спокойно пропустить данную главу.

Как и болынинпво ко.\Н1Ьютерных языков, Transact-SQL лучше всего изучается на практике.

Выбор редактора SQL

Первый шаг на пути к ов.чадению Transact-SQL - выбо) тютру.мента для ввода н редакти|Юва1Н1Я SQL. Вы будете использовать это средство для тзода команд SQL, их запуска н просмотра результатов, Инстру.мент, который вы выберете, будет вашим постоянным cnyTiniKo.vi до конца этой кнш'и, так что выбирайте мудро.

Утилита Query Analyzer, вк;1юченная в SQL Server, заслуживает вии.машш. С ее по.мощыо вы сможете работать с Н|)имерами из этой книги. Те, кто знаком с предыдущими версиялиг SQL Server, помнят ее как ISQL /W, Новая версия по лнюгим пара,метрам похожа на своих предн1естиенников, однако ее интерфейс совре.мениее. Новое назвать отражает тот факт, что новая версия уже не про-С10 средство ввода SQL. В дополненне к простому вводу и выполнению запросов оно предоставляет разнообразную информашио для анализа и оптимизации (п,)Дробнее см. главу 16, Оптимизация производительности Transact-SQL ),

Ваша первая задача нрп запуске Query Analyzer - соединение с се)вером, по-этому убедитесь, что ваш сервс]) фу1Нсциоии|:1ует, Когда вам предложат, введите н.мя пользователя и наХ)Ль (если вы установили новый сервер, пользователь sa но умолчанию имеет пустой пароль) и укажите имя вашего сервера. Если Query Analyzer и SQL Server запущены на одной манни1е, можете использовать . (точка - без кавычек) или (local) (не забудьте скобки) в качестве и.меии сервера. Пользовательский интерфейс Query Analyzer - интуитивно понятны11: вы вводите T-SQL-занросы в верхней обласаи окна н видите )езультаты в 1шжней.

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

. Как и во Bceii кнше, в этог! главе авто)ы пытаются представить вещи простыми. Мы постепенно пройдем через процесс создания таблиц, добавления в них дат1ых и получения из них данных. Глава нацелена исключительно на практические особенности при работе с SQL - несуществе1П1ые подробности Transact-SQL освеищются так быстро и кратко, насколько это возможно.



Создание базы данных

Базы данных, нмекнцнеся в датнлн момент на liauiCM сервере, отображаются и раскрывающемся списке на наиелн инструментов каждого окна. Вы .можете выбрать одну из них в списке, чтобы сделать ее активной для запросов, которые 13Ы выполняете в это.м окне. Нажатие сочета1Н1я клавин! Ctrl+E, F5 или Alt+X запускает Bain запрос, а нажатие Ctrl+F5 и|)оверяет его на наличие синтаксических ошибок.

СОВЕТ ---

Если вы попытаетесь выполнить запрос, а в окне редактирования будет выделена часть запроса, Query Analyzer выполнит выделенную часть, а не весь запрос. Это удобно для выполнения запросов по шагам и для быстрого запуска другой команды без необходимости открывать новое окно.

Одна из функций, которой очень не хватает в Циегу Analyzer, - ио.монИ) по объектам ио Alt+Fl. В ISQL/W вы могли выделить н.мя объекта в окне редактирования и нажать Alt+Fl, чтобы получить помощь ио этому объекту. Для таблиц и представлеиш ! вьшодился сокращениьп ! отчет sp help. Это было довольно удобно и избавляло от необходп.мости открывать новое окно запроса просто для того, чтобы получить С1И1С0К столбцов объекта.

Если вам нравится командная строка, вы можете предпочесть Query Analyzer утилиту OSQL. OSQL - это основанная па ODBC утилита командной строки, поставляелшя с SQL Server. Так же как н Query Analyzer, утилита OSQL может применяться для ввода и запуска операторов Transact-SQL и храни.мых процедур. Как только вы ввели запрос, наж.\игге Enter для перехода на новую строку, затем введите GO и снова нажмггге Enter, чтобы вьп10лн1ггь запрос (команда GO должна быть крайняя слева в сгроке). Чтобы BbniTii из OSQL, наберите EXIT и нал<.мите Enter.

OSQL и.меет .\июжество onnnii, задавае.\Н)1х в командно!! cipoKc и во время выполнения, описывать их здесь слн1!1ком долго. За более !1одробной инфор.ма-цией обратитесь в SQL Books Online.

Т|)етий Bap!ia!!T - испол1)3овать редактор SQL Secjuin, зат1са!!П1лй на 1ю.мпакт-днске, поставляе.ую.м с .этой кншой. Sequin ил!еет множество функц!1Й Query Analyz.ei, а также полезшле фу!1КЦ1111 eio !1рсди1естве11ников. Одно из его преимуществ - с i!0MOi!U>!o !ie!o МОЖНО вы11ол1!ять Baiipociji к любо.му серверу пли СУБД, для кото[)!)!х существует ООВС-!1ровайдер. Это означает, что вы сможете выполнять занрос1>1 к Access, Oracle и SQL Server, !1С11ол1хзуя один и!!струме!!т.

Создание базы данных

Воз.можио, у вас уже есть база данных, в которой вы можегс создавать различные временные таблицы, необходимые д.чя работы над при.мерами из этой книги. Если базы дан!1Ь!х у вас !!ет, создать ее довольно просто. В Transact-SQL базы данных создаются с ио.\10!ць!о !<омандь! CREATE DATABASE. Полный ее синтаксис молсет быть весь.ма сложен, од!!ако !ют простейшая (})0).\1а этой командь!:

CREATE DATABASE GG TS



Выполните эту команду в Query Analyzer, чтобы создать базу данных для работы над примерами из этой книги. Незаметно для вас SQL Server создаст два файла для размещения новой базы данных: GG TS.MDF и GG TS Log.LDF. Данные находятся в первом файле; информация журнала транзакций находится во втором. Журнал транзакций базы данных - это то место, куда сервер сначала помещает изменения, сделанные с данны.ми. Как только эти изменения удачно завершаются, они применяются атомарно - то есть как единое действие - к самим данным. Разделение пользовательских данных и данных журнала транзакций выгодно и с точки зрения возможности восстановления, и с точки зрения производительности, так что SQL Server по умолчанию так и работает. Если вы специально не укажете место размещения журнала транзакций (как в примере выше), SQL Server выберет его са.м (.место размещения по умолчанию - каталог с данными, указанный во время установки).

Обратите внимание, что мы не указали ни размер базы да}шых, ни размер ее файлов. Наша новая база данных настроена так, чтобы автоматически расширяться по мере добавления новых данных. Так в SQL Server происходит по умолчанию. Даже одна такая возможность - увеличение файлов базы дштных по .мере необходимости - значительно уменьшает нагрузку на администратора баз данных (database administrator, DBA), так как ему не нужно постоянно следить за наличием свободного места в базе данных. Если журнал тра}1закций полностью заполнен, новые изме}1ения не будут вноситься в базу данных, а если сегмент данных полностью заполнен - новые дан}1ые не будут добавляться в базу данных.

Создание таблиц

После того как база данных создана, можно начинать добавлять в нее объекты. Давайте начнем с создания нескольких таблиц с помощью оператора SQL CREATE TABLE. Для уверенности, что таблицы будут созданы в новой базе данных, установите GG TS в качестве текущей базы данных перед выполнением любой из этих команд. Это мож}ю сделать двумя снособа.ми: выполнить комагщу USE - USE GG TS - в окне редактора запроса перед выполнением любых других команд или (предполагается, что вы используете Query Analyzer) выбрать новую базу данных из раскрывающегося списка на панели инстру.ментов окна редактирования (если вашей базы данных еще не видно, выберите Refresh). Этот раскрывающийся список отражает текущую выбранную базу данных, так что перед продолжением убедитесь, что выбрана база да}И1ых GG TS.

Выполните следующую команду, чтобы создать таблицу customers (клиенты):

USE GG TS - Изменяем текущий контекст базы данных на GG TS GO

CREATE TABLE customers С

CustomerNumber int NOT NULL. LastName charOO) NOT NULL, FirstName charOO) NOT NULL. StreetAddress charOO) NOT NULL, City char(20) NOT NULL.



State char(2) MOT NULL. Zip char(lO) NOT NULL

После того как таблица customers создана, создайте таблицу orders (заказы), используя подобный синтаксис:

CREATE TABLE orders

OrderNumber int NOT NULL, OrderDate datetime NOT NULL. CustomerNumber int NOT NULL, ItemNumber int NOT NULL, Amount numericC9,2) NOT NULL

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

CREATE TABLE items {

ItemNumber int NOT NULL. Description charC30) NOT NULL, Price numeric(9,2) NOT NULL

Эти команды довольно очевидны. Единственный элемент, который может показаться странным, если вы новичок в SQL Server, это спецификация NOT NULL В SQL ключевое слово NULL - специальная лексема, которая служит для представления неизвестных или несуществующих значений. Это не то же са.мое, что воль для целых или пробелы для символьных столбцов, NULL показывает, что значение неизвестно или полностью отсутствует в столбце - его там вообще нет. Различие между NULL и нулем - можно иметь ноль на счету или не иметь счета вовсе (подробнее см. главу 3, Отсутствующие значения ). Ключевые слова NULL/NOT NULL служат для указания, может ли столбец хра}шть иеопределе}!-иые значения (nullability). Это определяет, может ли столбец быть действитель}ю пустым. Так что вы можете читать NULL/NOT NULL как НЕ ТРЕБУЕТСЯ/ТРЕБУЕТСЯ соответственно. Если поле не может содержать NULL, оио не может быть действительно пустым и поэтому обязано иметь какое-нибудь з}1ачение.

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

о Если вы явно укажете NULL или NOT NULL, будут применены эти настройки (допустимы ли они - смотрите далее).

о Если столбец ос}юван на пользовательско.м типе данных, задействуется настройка неопределенных значений этого типа.

о Если у столбца есть только один вариант настройки хранения неопределенных значений, используется этот вариант. Столбцы типа timestamp всегда должны содержать значения, так же как и столбцы типа bit, в зависимости от настроек совмести.мости сервера (определенных с помощью системной хра-}шмой процедуры sp dbcmptlevel).



Добавление данных

Для добавления данных в таб.тнцу, но одной записи за pxi, используется оператор INSERT Transact-SQL. Давайте исследуем его, добавив некоторые тестовые дан}тые в таблицу customers. Введите следующие команды SQL, чтобы добавить три записи в таблицу customers: INSERT INTO customers

VALUESd.Doe.John,123 Joshua Tree.Piano,iX.75025) INSERT INTO customers

VALUES{2.Doe.Jane.123 Joshua Iree.Piano,TX.75C25) INSERT INTO customers

VALUESO, Citizen. John. 5/ R-vens1de. Reo. CA. 9012G)

Теперь добавьте четыре записи в таблицу orders, используя такой л<е синтаксис:

INSERT INIC orders

VALUES{101.10/18/90.1,1001.123,45) INSERT INTO ordens

VALUES(102,02/27/92,2.1002.678.90) INSERT INTO onders

VALUES{103.G5/2C/95 .3,1003.86753.09) INSERT INTO orders

VALUES(104,11/21/97.1,1002,678,90;

Наконец, добавьте три записи в таблицу items:

INSERT INTO items

VALUESdOOl. WIDGET A ,123,45)

INSERT INTO Items

VALUES(1002.WIDGET Б' .678.90)

INSERT INTO items

VALUES( 1003. WIDGET C.86753.09)

Обратите внимание на то, что список нолей не указан ни в одной из приведенных команд INSERT - указан только список значений. По умолчанию ко-.манда INSERT добавляет значения во все столбцы по порядку, хотя вы могли бы

О Если настройка сессии ANSI NULL DFLT ON равна true (но умолчаигно ее значение равно значению, указанному для базы данных), допустимость lieonpe-деленных значе}нтй для столбца также равна true, ANSI SQL определяет, что столбцы могут но умолчанию хранить неопределенные значения. Установление соединения с SQL Server с по.чющью ODBC или OLEDB (то есть обычными способа.мн) устанавливает ANSI NULL DFLT ON в true по у.молчанию. хотя это значение может быть изменено в источниках данных ODBC или самими вызывающим приложением.

О Если настройка базы данных ANSI null default установлена в true (по умолчанию она равна false), допусти.мость неопределенных значений для столбца устанавливается в true.

О Если ИИ одно из этих условий не определяет настройку ANSI NULL, столбец по умолчанию не может принимать неопределенные значения.



1 2 3 4 ... 55
© 2004-2018 AVTK.RU. Поддержка сайта: +7 495 7950139 в тональном режиме 271761
Копирование материалов разрешено при условии активной ссылки.
Яндекс.Метрика