Подобно случаю построения индексов таблиц, в случае необходимости оптимизации операторов SQL потребуется интенсивное тестирование, которое можно квалифицировать как метод проб и ошибок. Нет единого рецепта оптимизации любой базы данных и любого оператора SQL в рамках определенной базы данных. Все базы данных оказываются разными, как разными оказываются требования к базе данных внутри каждой конкретной компании. В зависимости от этих требований выбираются и структура данных, и способы доступа к этим данным. В такой ситуации выбор наилучшего вида операторов SQL, при котором достигается оптимальная скорость работы с базой данных, оказывается очень важным.
Ради чего было потрачено столько усилий на обсуждение вопросов оптимизации, какой реальный выигрыш в скорости выполнения операций можно ожидать от применения описанных выше методов?
Реальный выигрыш от применения описанных выше методов оптимизации может составить доли секунд, минуты, часы и даже дни.
Какие существуют способы проверки операторов SQL на оптимальность?
Каждая реализация языка предлагает свои средства проверки оптимальности операторов SQL. Для проверки на оптимальность операторов этой книги использовались средства Oracle?. В Oracle для этого предусмотрен ряд возможностей. Среди них средства EXPLAIN PLAN, TKPROF и команды SET. Поищите информацию о подобных средствах в документации по той реализации языка, которую вы используете.
Задания практических занятий разделены на тесты и упражнения. Тесты предназначены для проверки общего уровня понимания рассмотренного материала. Упражнения дают возможность применить на практике идеи, обсуждавшиеся в ходе текущего урока, в комбинации с идеями из предыдущих уроков. Мы рекомендуем ответить на тестовые вопросы и выполнить упражнения прежде, чем продолжать дальнейшее чтение книги. Ответы можно проверить по Приложению Б, "Ответы".
1. Нужно ли использовать уникальный индекс в случае маленькой таблицы?
2. Что происходит, когда оптимизатор принимает решение не использовать индекс таблицы при выполнении запроса?
3. Где в выражении ключевого слова WHERE следует разместить наиболее ограничительные условия - до или после условий связывания таблиц?
Перепишите приведенные ниже операторы SQL в виде, который позволит увеличить скорость их выполнения по сравнению с исходным видом. Используйте таблицы EMPLOYEE_TBL И EMPLOYEE_PAY_TBL следующей Структуры.
EMPLOYEE_TBL_____
EMP_ID VARCHAR2(9) NOT NULL Ключевое поле
LAST_NAME VARCHAR2U5) NOT NULL
FIRST_NAME VARCHAR2(15) NOT NULL
MIDDLE_NAME VARCHAR2(15)
ADDRESS VARCHAR2(30) NOT NULL
CITY VARCHAR2(15) NOT NULL
STATE CHAR (2) NOT NULL
ZIP NUMBER(5) NOT NULL
PHONE CHAR(10)
PAGER CHAR(10)
EMPLOYEE__PAY_ TBL
EMP_ID VARCHAR2(9) NOT NULL Ключевое поле
POSITION VARCHAR2(15) NOT NULL
DATE_HIRE DATE
PAY_RATE NUMBER(4,2) NOT NULL
DATE_LAST-RAISE DATE
CONSTRAINT EMP_FK FOREIGN KEY (EMP_ID) REFERENCED
EMPLOYEE_TBL (EMP_ID)
a. SELECT EMP_ID, LAST_NAME, FIRST_NAME, PHONE
FROM EMPLOYEE_TBL
WHERE SUBSTR(PHONE,1,3) = '317' OR
SUBSTR(PHONE,1,3) = '812' OR
SUBSTR(PHONE,1,3) = '765';
б. SELECT LAST_NAME, FIRST_NAME
FROM EMPLOYEE_TBL
WHERE LAST_NAME LIKE '%ALL%';
в. SELECT E.EMP_ID, E.LAST_NAME, E.FIRST_NAME, EP.SALARY
FROM EMPLOYEE_TBL E,
EMPLOYEE_PAY_TBL EP
WHERE LAST_NAME LIKE 'S%'
AND E.EMP_ID EP.EMP_ID;
18-й час Управление доступом к базе данных
В ходе этого урока мы с вами поговорим об управлении доступом к базе данных, что в реляционных базах данных является одной из важнейших задач. Вы узнаете о том, как в рамках SQL создаются учетные записи пользователей, о безопасности пользователей, о пользовательских профилях и атрибутах, а также доступных пользователю соответствующих средствах.
Основными на этом уроке будут следующие темы.
• Типы пользователей
• Управление пользователями
• Место пользователя в базе данных
• Имена пользователей и имена схем
• Сеансы доступа пользователей к базе данных
• Изменение атрибутов пользователя
• Пользовательские профили
• Удаление учетной записи пользователя из базы данных
• Средства, доступные пользователю
Стандарт SQL предлагает идентифицировать пользователей базы данных с помощью идентификаторов разрешения доступа (Authorization Identifier - authio). В большинстве реализаций языка идентификаторы разрешения доступа называются просто пользователями. В этой книге для обозначения идентификаторов разрешения доступа мы применяем слова "пользователь", "пользователь базы данных", "имя пользователя", а также "учетная запись пользователя". В соответствии со стандартом SQL, идентификатор разрешения доступа является именем, по которому система распознает пользователя базы данных.
Пользователь превыше всего с точки зрения дизайна, структуры, реализации и управления любой базы данных. Потребности пользователя обязательно учитываются при разработке базы данных, и конечной целью разработки всегда должно быть создание такой базы данных, с которой удобно работать пользователю.
Что касается пользователей, то если бы их не было вообще, то с базой данных никогда не происходило бы ничего плохого. И хотя это утверждение похоже на правду, базы данных все равно создаются для того, чтобы с ними работали пользователи и работали каждый день.
Чаще всего контроль за работой пользователей относится к компетенции администратора базы данных, но иногда в этом процессе участвуют и обычные пользователи. Управление пользователями играет важнейшую роль в обеспечении надежной работы базы данных и осуществляется исключительно средствами SQL, хотя следует отметить, что последние зависят от конкретной реализации языка.
Различают следующие типы пользователей базы данных.
• Клерки, осуществляющие ввод данных
• Программисты
• Системные инженеры
• Администраторы баз данных
• Системные аналитики
• Разработчики
• Специалисты по тестированию
• Управляющий персонал
• Конечные пользователи
Пользователи каждого из указанных типов решают при работе с базой данных свои задачи (и при этом имеют свои проблемы), и поэтому занимают разные места в иерархии базы данных, имея различные уровни доступа к ней.
За управление пользователями вообшето отвечает управленческое звено компании, но управление пользователями в рамках базы данных относится к компетенции администратора базы данных и его подчиненных.
Администратор базы данных создает учетные записи пользователей, наделяет пользователей привилегиями, создает пользовательские профили и при необходимости удаляет учетные записи. Поскольку при большой активности пользователей такая работа может оказаться для одного человека непосильной, в некоторых компаниях имеется специальная служба безопасности, призванная помочь администратору базы данных в деле управления пользователями.