Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив1 / docx57 / Lab 3-4.docx
Скачиваний:
24
Добавлен:
01.08.2013
Размер:
46.05 Кб
Скачать

Часть третья. Работа с локальной бд

  1. Скрипт выборки данных из локальной БД в 1НФ

/* Тестовый скрипт выборки данных - выбирает информацию о слуайном номере телефона из БД */

DECLARE @tel VARCHAR(8); /* Переменная - случайный номер телефона */

DECLARE @i INTEGER; /* Переменная - итерация */

/* Переменная - временная таблица. Без неё MS SQL останавливает выборку данных... */

DECLARE @t TABLE(tel CHAR(8) NOT NULL,typ CHAR(1) NOT NULL,postcode INT,place VARCHAR(64), street VARCHAR(64), house VARCHAR(16), flatroom INT,own VARCHAR(96));

SET @i=0; /* устанавливаем счётчик итераций в 0 */

WHILE (@i<10000) /* пока счётчик меньше 10000 выполняем выборку информации */

BEGIN

/* Получаем случайный номер телефона */

SET @tel=CAST(round(RAND()*14+21,0) AS VARCHAR(2))+'-'+CAST(round(RAND()*89+10,0) AS VARCHAR(2))+'-'+CAST(round(RAND()*89+10,0) AS VARCHAR(2));

/* Делаем выборку данных из распределённой БД и вставку во временную таблицу строки с информацией о номере телефона */

INSERT INTO @t SELECT tel,typ,postcode,place,street,house,flatroom,own FROM tels WHERE tels.tel=@tel;

/* Удаляем строку из временной таблицы */

DELETE FROM @t;

/* Увеличиваем номер итерации на 1 */

SET @i=@i+1;

END;

Время выполнения

1 узел (ноутбук)

2 узел (нетбук)

3 сек

6 сек

4 сек

4 сек

2 сек

4 сек

3 сек

4 сек

Среднее время выполнения:

3 сек

4.5 сек

  1. Скрипт выборки данных из локальной БД в 3НФ

/* Тестовый скрипт выборки данных - выбирает информацию о слуайном номере телефона из БД */

DECLARE @tel VARCHAR(8); /* Переменная - случайный номер телефона */

DECLARE @i INTEGER; /* Переменная - итерация */

/* Переменная - временная таблица. Без неё MS SQL останавливает выборку данных... */

DECLARE @t TABLE(tel CHAR(8),typ CHAR(1),postcode INT,place VARCHAR(64), street VARCHAR(64), house VARCHAR(16), flatroom INT,own VARCHAR(96));

SET @i=0; /* устанавливаем счётчик итераций в 0 */

WHILE (@i<10000) /* пока счётчик меньше 10000 выполняем выборку информации */

BEGIN

/* Получаем случайный номер телефона */

SET @tel=CAST(round(RAND()*14+21,0) AS VARCHAR(2))+'-'+CAST(round(RAND()*89+10,0) AS VARCHAR(2))+'-'+CAST(round(RAND()*89+10,0) AS VARCHAR(2));

/* Делаем выборку данных из распределённой БД и вставку во временную таблицу строки с информацией о номере телефона */

INSERT INTO @t SELECT phone,owntype,postcode,place,street,houseno,flatroom,own FROM telephones LEFT JOIN owners ON telephones.ownid=owners.ownid LEFT JOIN houses ON houses.houseid=owners.houseid LEFT JOIN streets ON streets.streetid=houses.streetid LEFT JOIN places ON places.placeid=streets.placeid WHERE phone=@tel;

/* Удаляем строку из временной таблицы */

DELETE FROM @t;

/* Увеличиваем номер итерации на 1 */

SET @i=@i+1;

END;

Время выполнения

1 узел (ноутбук)

2 узел (нетбук)

5 сек

7 сек

4 сек

5 сек

4 сек

5 сек

5 сек

5 сек

Среднее время выполнения:

4.5 сек

5.5 сек

Время выполнения на локальной БД меньше, так как нет передачи данных по сети. Выборка данных из локальной таблицы в 1нф быстрее, чем из локальной БД в 3нф, так как в 1НФ выборка идет из одной таблицы по одному ключу, а в 3НФ выборка идет из трех таблиц, объединенных JOIN-ми.

Соседние файлы в папке docx57