Быстрый способ вставки из реляционной таблицы в объектно-ориентированную таблицу - PullRequest
0 голосов
/ 16 декабря 2011

У меня есть реляционная таблица с большим количеством столбцов.(import_table) Я пытаюсь вставить все эти данные в объектно-ориентированную базу данных.

В объектно-ориентированной базе данных есть таблицы:

#table (tableId, name)
#row (rowId, table_fk)
#column(colId, table_fk, col_name)
#value(valueId, col_fk, row_fk)

Пока что я создал процедурупрочтет import_table information_schema и правильно вставит таблицу и столбцы в объектно-ориентированную структуру.Затем я копирую import_data во временную таблицу с дополнительным столбцом identity, чтобы получить id строки.Затем выполните итерацию по всем строкам с внутренним циклом для итерации по каждому столбцу и вставьте pr.колонка.Вот так:

SELECT ROWID=IDENTITY(INT, 1, 1), * INTO #TEST
FROM import_table

DECLARE @COUNTER INT = 1
WHILE @COUNTER <= (SELECT COUNT(*) FROM #TEST)
BEGIN
    INSERT INTO #ROW (ROWID, TABLE_FK) VALUES(@COUNTER, 1)
    DECLARE @COLUMNCOUNTER INT = 1
    WHILE @COLUMNCOUNTER <= (SELECT COUNT(*) FROM #COLUMN WHERE TABLE_FK = 1)
    BEGIN
        DECLARE @COLNAME NVARCHAR(254) = select col_name from #column where table_fk = 1 and rowid = @columnCounter
        DECLARE @INSERTSQL NVARCHAR(1000) = 'insert into #value (column_fk, row_fk, value) select '+cast(@columnCounter as nvarchar(20))', '+cast(@counter as nvarchar(20))+', ' + @colName+' from #test where rowId = '+cast(@counter as nvarchar20))
        exec (@insertSQL)
        set @columncounter = @columncounter +1
    end
    set @counter = @counter +1
end

Это работает, но очень медленно.Любые предложения о том, как ускорить процесс?

Ответы [ 2 ]

0 голосов
/ 16 декабря 2011

Один из способов ускорить ваш код - обернуть вставки в транзакции (может быть, одна транзакция на итерацию внешнего цикла?).Если каждая из них вставлена ​​в отдельную транзакцию, как это делается сейчас, будет очень медленно, если много вставок.

0 голосов
/ 16 декабря 2011

Редизайн базы данных.

У вас есть свойство неверного типа таблицы.Это известные компромиссы с настройками, и угадайте, с какой скоростью они плохо справляются. Ой.

Скорее всего, вы можете сделать что-то быстрее в C # снаружи, а затем направить вставки обратно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...