Часть третья. Работа с локальной бд
Скрипт выборки данных из локальной БД в 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 сек |
Скрипт выборки данных из локальной БД в 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-ми.