- •Общие сведения Сведения об эумк
- •Методические рекомендации по изучению дисциплины
- •Рабочая учебная программа
- •Учреждение образования
- •«Белорусский государственный университет
- •Информатики и радиоэлектроники»
- •Пояснительная записка
- •Содержание дисциплины
- •1. Название тем лекционных занятий, их содержание, объем в часах.
- •2 Перечень тем ипр их наименование и объем в часах
- •3 Перечень тем контрольных работ их наименование и объем в часах
- •4. Курсовая работа, ее характеристика
- •Перечень тем курсовых работ
- •5. Литература
- •5.1 Основная
- •5.2 Дополнительная
- •6. Перечень компьютерных программ, наглядных и других пособий, методических указаний и материалов и технических средств обучения
- •7. Учебно-методическая карта дисциплины
- •1.1.2. Классификация субд
- •1.2. Субд начального уровня – MySql
- •1.2.1. Введение в MySql
- •1.2.2. Подготовка к работе с MySql
- •1.2.3. Создание базы данных, основы работы с таблицами MySql
- •1.2.4. Типы данных столбцов MySql
- •1.2.5. Работа с таблицами MySql
- •1.2.6. Логические операторы MySql
- •1.2.7. Команды обработки данных MySql
- •1.2.8. Математические функции MySql
- •1.2.9. Работа с датой и временем в MySql
- •1.2.10. Работа со строками в MySql
- •1.2.11. Дополнительные функции MySql
- •1.3. Субд корпоративного уровня – ms sql Server
- •1.3.1. Общая теория запросов sql
- •1.3.2. Имена в sql
- •1.3.3. Типы данных
- •1.3.4. Константы
- •1.3.5. Выражения
- •1.3.6. Встроенные функции
- •1.3.7. Отсутствующие значения (значения null)
- •1.3.8. Простые запросы sql на выборку данных
- •1.3.9. Предложение select
- •1.3.10. Предложение from
- •1.3.11. Вычисляемые столбцы
- •1.3.12. Выборка всех столбцов (инструкция select *)
- •1.3.13. Повторяющиеся строки (предикат distinct)
- •1.3.14. Отбор строк (предложение where)
- •1.3.15. Условия отбора
- •1.3.16. Составные условия отбора (операторы and, or и not)
- •1.3.17. Сортировка результатов запроса (предложение order by)
- •1.3.18. Правила выполнения однотабличных запросов
- •1.3.19. Сложные запросы
- •1.3.20. Запросы на объединение и повторяющиеся строки
- •1.3.21. Запросы на объединение и сортировка
- •1.3.22. Вложенные запросы на объединение
- •1.3.23. Многотабличные запросы на выборку
- •1.3.24. Запросы с использованием отношения предок/потомок
- •1.3.25. Запросы на выборку к трём и более таблицам
- •1.3.26. Объединение таблиц по неравенству
- •1.3.27. Особенности многотабличных запросов
- •1.3.28. Самообъединения
- •1.3.29. Производительность при обработке многотабличных запросов
- •1.3.30. Умножение таблиц
- •1.3.31. Правила выполнения многотабличных запросов на выборку
- •1.3.32. Внешнее объединение таблиц
- •1.3.33. Левое и правое внешние объединения
- •1.4. Способы взаимодействия программных средств в субд
- •1.4.1. Доступ к базе данных на стороне сервера
- •1.4.2. Доступ к базе данных на стороне клиента
- •1.5. Современные тенденции развития субд
- •1.5.1. Введение
- •1.5.2. Как предсказать тенденции развития субд
- •1.5.3. Эволюционный подход
- •1.5.4. Тенденции развития
- •1. Виртуализация ресурсов и grid-технологии
- •2. Встраивание Information Life Cycle Management (ilm) в субд
- •3. Самоуправление, самодиагностика, самолечение
- •4. Real Application Testing – механизмы промышленного тестирования версий и изменений
- •5. Совершенствование архитектур максимальной доступности
- •6. Включение измерения времени в субд
- •7. Поддержка новых типов данных (xml, rfid, Semantic Web, геном, медицина, быстрые lob и т.Д.)
- •8. Умные механизмы сжатия и дедублирования
- •9. Совершенствование методов защиты данных
- •11. Облачные вычисления (Cloud computing)
- •12. Машины баз данных
- •2.1.2. Администрирование ms sql Server
- •2.2. Повышение надёжности баз данных
- •2.2.1. Обеспечение сохранности данных в MySql
- •2.2.2. Обеспечеие сохранности данных в ms sql Server
- •2.3. Повышение производительности баз данных
- •2.3.1. Повышение производительности MySql
- •2.3.2. Повышение производительности ms sql Server
- •2.4. Повышение безопасности бд
- •2.4.1. Безопасность MySql
- •2.4.2. Безопасность ms sql Server
- •2.5. Модернизация бд в процессе эксплуатации
- •2.5.1. Расширение возможностей MySql
- •2.5.2. Распределённые базы данных
- •Указания по выбору варианта
- •Курсовое проектирование Методические указания по выполнению
- •Цель проектирования
- •Теоретические положения Основные понятия баз данных
- •Этапы проектирования базы данных
- •Модели данных
- •Нормальные формы отношений
- •Задания к выполнению курсового проекта
- •Указания по выбору варианта
- •Правила оформления выполненных заданий
- •Пример проектирования базы данных
1.3.29. Производительность при обработке многотабличных запросов
С увеличением количества таблиц в запросе резко возрастает объём работы, необходимой для выполнения запроса. В самом SQL нет ограничений на число таблиц, объединяемых в одном запросе. Но некоторые СУБД ограничивают число таблиц, чаще всего восемью. На практике высокие затраты на обработку многотабличных запросов во многих приложениях накладывают ещё более сильные ограничения на количество таблиц.
В приложениях, предназначенных для оперативной обработки транзакций (OLTP), запрос обычно ссылается только на одну или две таблицы. В этих приложениях время ответа является критичной величиной – пользователь, как правило, вводит один или два элемента данных, и ему требуется получить ответ от базы данных в течение одной или двух секунд.
В отличие от OLTP-приложений, в приложениях, предназначенных для поддержки принятия решений, запрос, как правило, обращается ко многим таблицам и использует сложные отношения, существующие в базе данных. В этих приложениях результаты запроса часто нужны для принятия важных решений, поэтому вполне приемлемыми считаются запросы, которые выполняются несколько минут или даже несколько часов.
1.3.30. Умножение таблиц
Объединение – это частный случай более общей комбинации данных из двух таблиц, известной под названием "декартово произведение" (или просто произведение) двух таблиц. Произведение двух таблиц представляет собой таблицу (называемую таблицей произведения), состоящую из всех возможных пар строк обеих таблиц Столбцами таблицы-произведения являются все столбцы первой таблицы, за которыми следуют все столбцы второй таблицы. На рисунке изображён пример произведения двух маленьких таблиц.
Рисунок 1.3.30.1 – Произведение
Если создать запрос к двум таблицам без предложения WHERE, таблица результатов запроса окажется произведением двух таблиц. Например, результатом запроса "показать все возможные комбинации служащих и городов"
SELECT NAME, CITY FROM SALESREPS, OFFICES
будет произведение таблиц SALESREPS и OFFLCES, состоящее из всех возможных комбинаций служащий/город. Обратите внимание на то, что для объединения двух упомянутых таблиц используется точно такая же инструкция SELECT, но только с предложением WHERE, содержащим условие сравнения связанных столбцов.
Показать список служащих и городов, в которых они работают:
SELECT NAME, CITY FROM SALESREPS, OFFICES WHERE REP_OFFICE = OFFICE
Два приведённых запроса указывают на важную связь между объединениями и произведением.
Объединение двух таблиц является произведением этих таблиц, из которого удалены некоторые строки. Удаляются именно те строки, которые не удовлетворяют условию сравнения связанных столбцов (условию отбора) для данного объединения.
Понятие произведения важно, так как оно входит в формальное определение правил выполнения многотабличных запросов на выборку, приведённое в следующем разделе.
1.3.31. Правила выполнения многотабличных запросов на выборку
Рассмотрим правила выполнения SQL-запроса на выборку для случая многотабличных запросов. Эти правила раскрывают смысл любой многотабличной инструкции SELECT, в точности определяя процедуру, которая всегда позволяет получить правильный набор результатов запроса.
1. Если запрос представляет собой запрос на объединение (UNION) инструкций SELECT, для каждой из этих инструкций выполнить действия 2-5 и получить отдельную таблицу результатов.
2. Сформировать произведение таблиц, перечисленных в предложении FROM. Если в предложении FROM указана только одна таблица, то произведением будет она сама.
3. Если имеется предложение WHERE, применить заданное в нём условие отбора к каждой строке таблицы произведения и оставить в ней только те строки, для которых это условие выполняется, т.е. имеет значение TRUE; строки, для которых условие отбора имеет значение FALSE ИЛИ NULL, – отбросить.
4. Для каждой из оставшихся строк вычислить значение каждого элемента в списке возвращаемых столбцов и создать одну строку таблицы результатов запроса. При любой ссылке на столбец берётся значение столбца для текущей строки.
5. Если указан предикат DISTINCT, удалить из таблицы результатов запроса все повторяющиеся строки.
6. Если запрос является запросом на объединение (UNION) инструкций SELECT, объединить результаты выполнения отдельных инструкций в одну таблицу результатов запроса. Удалить из неё повторяющиеся строки, если не указан предикат ALL.
7. Если имеется предложение ORDER BY, отсортировать результаты запроса.
Чтобы увидеть, как работает эта процедура, рассмотрим следующий запрос. Получить название компании и список всех заказов для клиента с идентификатором 2103:
SELECT COMPANY, ORDER_NUM, AMOUNT FROM CUSTOMERS, ORDERS WHERE CUST_NUM = CUST AND CUST_NUM = 2103 ORDER BY ORDER_NUM
Выполним действия, перечисленные выше:
1. Из таблицы CUSTOMERS и таблицы ORDERS сформируем таблицу произведения, содержащую все возможные комбинации строк из двух таблиц.
2. Применяя условие отбора, определённое в предложении WHERE, отберём только те строки таблицы произведения, в которых идентификаторы клиентов одинаковые (CUST_NUM = CUST) и равны заданному идентификатору (CUST = 2103).
3. Из таблицы произведения выберем три столбца (COMPANY, ORDER_NUM и AMOUNT), указанных в предложении SELECT, и получим таблицу результатов запроса, состоящую из четырёх строк.
4. В соответствии с предложением ORDER BY отсортируем четыре строки по столбцу ORDER_NUM и получим окончательный результат.
Очевидно, что ни одна реляционная СУБД не будет выполнять запрос подобным образом (всё будет гораздо оптимальнее и быстрее). Здесь мы всего лишь рассмотрели логику работы многотабличных запросов без указания того, как они выполняются "внутри СУБД".