Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
для студентов РУБД / Лаб раб 4 курс.doc
Скачиваний:
59
Добавлен:
21.03.2016
Размер:
635.39 Кб
Скачать

ЛАБОРАТОРНЫЙ ПРАКТИКУМ

Дисциплина "Разработка и эксплуатация удаленных баз данных" является обязательной для студентов, обучающихся на факультете СПО ГУ ИТМО, и ее цель -- обеспечение фундаментальной подготовки студентов по использованию методов и средств программирования в одном из СУБД.

Предметная область является сквозной для проведения лабораторных работ и выдается на первой лабороторной работе.

Варианты предмтных областей имеют различную степень сложности.

Варианты представлены в приложении 3.

1. Подготовка и допуск к работе

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

Перед работой студент должен:

  • предъявить преподавателю полностью оформленный отчет о предыдущей работе;

  • ответить на вопросы преподавателя.

К работе не допускаются студенты, которые не выполнили одно из вышеперечисленных требований.

2. Содержание отчета

  • титульный лист;

  • цель работы;

  • текст задания;

  • перечень всех использованных в практической работе команд и инструкций;

  • результаты выполнения задания;

  • вывод по работе;

  • ответы на контрольные вопросы.

Лабораторная работа №15

Тема:Создание индексов.

Цель: Формирование умений для работы в среде СУБД MySql.

Сведения из теории.

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

CREATE [UNIQUE] INDEX index_name ON tablename (column1, column2, columnN)

MySQL позволяет также создавать индекс одновременно с созданием таблицы.

CREATE TABLE materials (id INT NOT NULL, name CHAR(50) NOT NULL, resistance INT,

melting_pt REAL, INDEX indexl (id, name), UNIQUE INDEX index2 (name))

В этом примере для таблицы создается два индекса. Первый индекс indexl состоит из полей id и name. Второй индекс включает в себя только поле name и указывает, что значения поля name должны быть уникальными. Все поля, указанные в уникальном индексе, должны быть объявлены как NOT NULL . Когда индекс содержит более одной колонки (например, name, rank, nserial_number), MySQL читает колонки в порядке слева направо. Благодаря используемой MySQL структуре индекса всякое подмножество колонок с левого края автоматически становится индексом внутри «главного» индекса. Например, когда создается индекс name, rank, serial_number, создаются также «свободные» индексы name и name вместе с rank. Однако индексы rank или name и serial_number не создаются, если не потребовать этого явно.

Прежде чем создавать таблицу, нужно решить, какие поля будут ключами (и будут ли вообще ключи). Любые поля, которые будут участвовать в объединении таблиц, являются хорошими кандидатами на роль первичного ключа.

PRIMARY KEY Создает первичный ключ. Первичный ключ — это особый ключ, который может быть только один для каждой таблицы. По сути, первичный ключ- это уникальный (UNIQUE) ключ с именем «PRIMARY». Несмотря на привилегированный статус, он функционирует как любой другой уникальный ключ.

UNIQUE [nаmе] (column, [column2, . , . ])

Создает особый индекс, все входящие значения которого должны быть уникальными (и соответственно они уникальны в индексированных полях). Попытка ввести существующее значение в уникальный индекс вызовет ошибку.

При индексировании текстовых полей (CHAR, VARCHAR и их синонимы) возможно индексирование только первой части всего поля. Например, следующая команда создаст индекс числового поля 'id' вместе с первыми 20 символами текстового поля 'address':

INDEX adds ( id, address(20) );

При выполнении любого поиска в поле 'address' для сравнения будут использованы только первые 20 символов до тех пор, пока не встретится более одного совпадения. Поэтому можно получить большой выигрыш в производительности, если использовать для индексирования только некоторое количество символов текстового поля, которые, по вашему мнению, дадут уникальные значения.

Поля, входящие в индекс, должны быть определены с атрибутом NOT NULL При создании индекса отдельной командой MySQL сгенерирует ошибку, если NOT NULL не указан. Однако при определении первичного ключа добавлением атрибута PRIMARY KEY к описанию таблицы, атрибут NOT NULL будет добавлен автоматически (без предупреждения), если он не указан явно.

АLTER [IGNORE] TABLE tbl_name alter_spec [, alter_spec ...]

alter_specification:

или ADD INDEX [index_name] (index_col_name,...)

или ADD UNIQUE [index_name] (index_col_name,...)

или ADD FULLTEXT [index_name] (index_col_name,...)

или ADD [CONSTRAINT symbol] FOREIGN KEY [index_name] (index_col_name,...)

[reference_definition]

или ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}

или DROP PRIMARY KEY

или DROP INDEX index_name

DROP INDEX index_name ON tbl_name

Оператор DROP INDEX удаляет индексы, указанные в index_name из таблицы tbl_name.

Используемый в команде CREATE TABLE синтаксис для индексации префикса столбца выглядит примерно так:

KEY index_name (col_name(length))

В следующем примере создается индекс для первых 10 символов в столбце name:

CREATE TABLE test (name CHAR(200) NOT NULL, KEY index_name (name(10)));

Предположим, создается следующая таблица:

CREATE TABLE test (id INT NOT NULL, last_name CHAR(30) NOT NULL,first_name CHAR(30) NOT NULL, PRIMARY KEY (id),INDEX name (last_name,first_name));

Задание.

  1. Проанализировать запросы и выявить поля, по которым нужно создать индексы.

  2. Выполнить запросы, по которым будут создаваться индексы, записать время выполнения запроса.

  3. Создать индексы.

  4. Создать запросы поиска данных по этим индексам, сравнить время выполнения с п.1.

  5. Провести анализ и аргументировонно доказать правильность создания индексов.