Эффективность загрузки из одной таблицы по сравнению с загрузкой из двух таблиц с одинаковой структурой и объединение результатов.(без индексов, MSSQL) - PullRequest
0 голосов
/ 14 мая 2018

Более эффективно помещать все данные определенного типа в одну таблицу для загрузки или лучше иметь их в двух таблицах и объединять результаты?
Это необходимо для оптимизации производительности программного обеспечения, загружающего данные.

1 Ответ

0 голосов
/ 14 мая 2018

Чтобы доказать, что загрузка программного обеспечения незначительно отличается с точки зрения работы, выполняемой сервером SQL, я провел следующие тесты.
Первый тест вставляет 100 тыс. Строк в каждую из 2 таблиц и загружает данные издве таблицы.
Второй тест вставляет 200 тыс. строк в 1 таблицу и загружает ее.
Заключение?
Время, необходимое для сохранения 100 тыс. строк в двух таблицах, такое же, как и для сохранения 200 тыс. строк водин стол(79 секунд) Время, необходимое для выбора всех 200 000 строк данных, разделенных на две таблицы, совпадает со временем, необходимым для выбора 200 000 строк данных из одной таблицы.(10 секунд на 10 выборов).

Вот код:

Вставка в две таблицы:

CREATE TABLE GpsDataA ( GpsDataID int PRIMARY KEY IDENTITY(1,1), X float, Y float );

 DECLARE @i int = 0;
 WHILE (@i < 100000) 
 BEGIN 
   INSERT INTO GpsDataA ( X, Y ) VALUES (1, 2);
   SET @i = @i + 1;
 END

 CREATE TABLE GpsDataB ( GpsDataID int PRIMARY KEY IDENTITY(1,1), X float, Y float );

 DECLARE @i2 int = 0;
 WHILE (@i2 < 100000) 
 BEGIN 
   INSERT INTO GpsDataB ( X, Y ) VALUES (1, 2);
   SET @i2 = @i2 + 1;
 END
  -- 1m19s  to insert to both tables

Вставка 200 тыс. Строк в одну таблицу:

 CREATE TABLE GpsDataAB ( GpsDataID int PRIMARY KEY IDENTITY(1,1), X float, Y float );

 DECLARE @i int = 0;
 WHILE (@i < 200000) 
 BEGIN 
   INSERT INTO GpsDataAB ( X, Y ) VALUES (1, 2);
   SET @i = @i + 1;
 END
 -- 1m19s  to insert to one table

Выбор 10раз из двух таблиц:

DECLARE @i int = 0;
 WHILE (@i < 10) 
 BEGIN 
   SELECT * 
    FROM GpsDataA 
   UNION ALL
    SELECT *
    FROM GpsDataB
  SET @i = @i + 1;
 END

- 10 секунд для запуска выше кода

Выбор 200 000 строк из одной таблицы:

DECLARE @i int = 0;
 WHILE (@i < 10) 
 BEGIN 
   SELECT * 
    FROM GpsDataAB
  SET @i = @i + 1;
 END

- 10 секунд для запускавышеуказанный код

...