Программирование баз данных MS SQL Server (1084479), страница 70
Текст из файла (страница 70)
Приведенные здесь указания помогут выбрать именно такие типы запросов, которые в наибольшей степени подходят для той или другой ситуации. - вбы рнова оталкчейемеяс одной йз.проблем;;при рвббмотреннн'которой необходгнмо-под; ' ,ввергнуть.крнтичагскому'ананду;сдо)вившееся йоябхгенне дел',-Нй сей разсобчьчект)емостане- ', внттсв:нейродумьанное испепьзрввнне "универоаяьныкн:правил, ' ВУНаотсящЕМ", раэдьЕВЕ: РЕЧЬ Ндиат-О,тОМ,';Ка)) 'обЫЧНО СянайЫВавтся)ПрацЕСС.ВбрабОПОГьдаН. : НЫХ.' В даННОМ 'КОНтахота, СЛОВО, "ОбЫЧНО" СтаНОВНзтогв 'ЧрЕЗВЫЧВйНО;ЕЫраэитВПЬНЫМ::.В найва: ': ЗОг; кек н во мйогом другом„.'яншь немнбгнье:правиле.можнзо считать' 6езуся)овне "истин.. ными.' Но когда деяс касается повышения'-' произьодительноотй Вйс: $егаег,' нербходимо :-выбнрйть только ,'такие.,средства ягзытка Щ))„котбрые надежно обесспечнеают'двести)кейне',: ':Иначе говортя'„мнозгогв,'зависят от- того, насколько'вахгно добнтьсья' вылсокойзпроневодьрельь '-' ноотн данногоз конфетного звпрйса,,;ясли, пронаводятельнооуть,цействйтедьно,являетс)я, ре- щаюгднм''файтйрйм, 'то''не-огрйннчяаайтесь-нспояьзованнем яншь:общепринятык правая.
рзуководатвуйтесь нмн как отправной точкой,"а затем':снова:и.сйова акспернмчейтнруйтсе-н отыскивайте-асе 6рйее.зФфектйвнсые подходы. Сравнение возможностей подзапросов и соединений Выше в настоящей главе уже было сказано, что автор однажды участвовал в дискуссии со своим сотрудником по поводу того, какие конструкции, подзапросы или соединения являются более приемлемыми.
Взгляды, высказанные обоими участниками обсуждения этого вопроса, оказались прямо противоположными. Кяк и следовало ожидать в таких обстоятельствах, мы оба оказались в определенной степени правы (а из этого следует, что и в какой-то степени неправы). Давно сложившаяся, традиционная точка зрения на подзапросы всегда состояла в том, что вместо них при любой возможности гораздо лучше использовать соединения. При определенных обстоятельствах такое мнение является абсолютно правильным, а в других условиях многое зависит от широкого набора факторов. В табл.
7.2 приведены сведения о том, в каких ситуациях применяются подзапросы и соединения, и даны рекомендации по выбору наиболее рационального способа организации работы. Дополнительные сведении о запросах 275 Рекомендуемый способ организации работы Ситуация Рекомендуется предварительное выполнение запроса. Объявить переменную, а затем осуществить выборку необходимого значения в эту переменную. Это позволяет выполнить предполагаемый под- запрос только единожды, а не столько раз, сколько имеется строк во внешней таблице Предполагается, что значение, возвращаемое подзапросам, должно быть одинаковым для каждой строки во внешнем запросе Обе таблицы являются относи- тельно небольшими (скажем, 10 ООО строк или меньше) Рекомендуется применение подзапросов.
Точные причины мне неизвестны, но я сам неоднократно проверял зту рекомендацию, и в каждом случае она в значительной степени оправдывалась. По-видимому, поиск требует меньших издержек по сравнению с соединением Рекомендуется применение подзапросов. И в этом случае гораздо меньше издержек требует поиск только одной строки и подстановка соответствующего ей значения, чем выполнение соединения па всей таблице После проверки всех критериев в операции сравнения должно быть возвращено только одно значение Рекомендуется применение подзапросов. Поиск по одному или даже по нескольким столбцам обычно требует меньших затрат ре- сурсов, чем хешированное соединение После проверки всех критериев в операции сравнения должно быть возвращено относительно немно- го значений; на столбце поиска не задан индекс Поисковая таблица является от- носительно небольшой, но базо- вая таблица велика По возможности, следует применять вложенные подзапросы; в ином случае соединения являются более предпочтительными, чем связанные подзапросы.
При использовании подзапросов поиск осуществляется только единожды, а издержки относительно малы. С другой стороны, при использовании связанных подзапросов по- иск многократно повторяется в цикле. При указанных обстоятель- ствах наилучшим вариантом чаще всего становится соединение Рекомендуется применение соединения. По существу, при вы- полнении связанного подзапроса создается вложенный цикл.
Эта может повлечь за собой непроизводительное расходование весьма значительных ресурсов. В большинстве ситуаций соединения обе- спечивают гораздо более высокое быстродействие по сравнению с курсорами, на все равно остаются менее производительными по сравнению с другими возможными способами обработки данных Применение производных таблиц обычно влечет за собой значи- тельное повышение издержек, поэтому, предпринимая попытку организовать с их помощью обработку данных, необходимо дей- ствовать осмотрительно.
Следует помнить, что создание (или, так сказать, "производство") подобных таблиц осуществляется лишь единожды, после чего производные таблицы хранятся в памяти. Это означает, что основная часть издержек обусловлена первона- чальными затратами на создание таблиц и отсутствием индексов дюка на очень крупных результирующих наборах. Вообще говоря, применение производных таблиц мажет способствовать либо по- нижению, либо повышению производительности; зто зависит от конкретных условий, Таким образом, прежде чем приступить к соз- данию основанного на них программного обеспечения, необходимо тщательно обдумать все обстоятельства Рекомендуется применение операторов кхтятя.
Операторы кхтятя позволяют прекратить поиск после обнаружения первого же значения, соответствующего критерию поиска, и в случае не- обходимости перейти к выполнению следующей операции поиска. Это способствует значительному сокращению издержек Выбор между связанным подза- просом и соединением Выбор между производными таблицами и другими програм- мными средствами Выбор между операторами кхтятя и другими программными средствами Таблица 7.2. Рекомендации по выбору наиболее рационального способа организации работы в различных ситуациях 276 Глава 7 В табл.
7.2 приведены лишь самые основные рекомендации. Количество возможных ситуаций и соответствующих им способов организации работы является практически бесконечным. Резюме По-видимому, способы организации запросов, описанные в главах 3 и 4, охватывают 80% или даже больше ситуаций, связанных с применением запросов, с которыми приходится сталкиваться на практике, но остальные 20% могут оказаться буквально не поддающимися решению с использованием широко известных приемов программирования. Иногда возникают настолько сложные задачи, что нелегко даже понять, как приступить к формированию запроса, который позволит найти требуемый ответ, а в других случаях никак не удается добиться приемлемой производительности конкретного запроса или хранимой процедуры.
Так или иначе, на практике не всег да удается достичь поставленной цели с помощью простых запросов и соединений. Требуется нечто большее, и мы надеемся, что средства, описанные в настоящей главе, позволят вам приобрести небольшой дополнительный арсенал, позволяющий справляться с такими трудными ситуациями. Упражнения 7.1. Напишите запрос, который возвращает сведения о том, какова дата приема на работу каждого из служащих компании Могспийпб, в формате ММ/00/Уу. 7.2. Напишите отдельные запросы с использованием соединения, подзапроса, а затем оператора ЕххятБ, чтобы составить список всех заказчиков компании Могспиьпб, которые не разместили в ней свои заказы.
7.3. Покажите пять самых последних заказов, сделанных заказчиком, который потра- тил больше 25 000 долларов на приобретение товаров в компании ногсоньпсь Нормализация и другие важные проблемы проектирования В предыдущих главах были приведены многочисленные примеры таблиц, а в данной главе речь пойдет о том, в каких целях в конечном итоге создаются таблицы. За редкими исключениями в настоящей книге в основном рассматриваются таблицы, предназначенные для оперативной обработки транзакций (ОпЬ1пе Тгапзасг!оп Ргосезз!пя — ОЕТР). Безусловно, определенное внимание было уделено описанию различий между оперативной обработкой транзакций и оперативной аналитической обработкой (ОпЬ|пе Апа1уцса! Ргосезз!пя — О1.АР), которая представляет собой еще одно важное направление применения баз данных, но данная книга главным образом посвящена описанию проектов таблиц, в наибольшей степени предназначенных для самого основного направления использования баз данных — ОЕТР.
В связи с этим рассматриваемые примеры таблиц базы данных чаще всего имели такую организацию, которую принято называть третьей нормальной формой. В настоящей главе будет приведено достаточно подробное описание принципов нормализации. А на данный момент достаточно отметить, что нормализацией называется способ преобразования структуры данных в логически обоснованную форму, не содержащую повторяющихся данных, которая позволяет легко восстановить исходную структуру данных. Иными словами, данные в результате проведения нормализации принимают определенную стандартную структуру.