Нормализация данных - массовые вставки с использованием цикла - PullRequest
0 голосов
/ 19 мая 2009

Есть ли у кого-нибудь советы, которые могли бы помочь ускорить процесс разбивки таблицы и вставки большого количества записей в новую таблицу.

В настоящее время я использую Access и VBA для преобразования таблицы, содержащей записи с большой строкой (700+ символов), в новую таблицу, где каждый символ имеет свою собственную запись (строку). Я делаю это, перебирая по строке символ 1 за раз и вставляя в новую таблицу, используя простой DAO в VBA.

В настоящее время я работаю с небольшим подмножеством данных - 300 записей, каждая из которых содержит строку из 700 символов. Этот процесс занимает около 3 часов, поэтому он не будет масштабироваться до полного набора данных из 50 000 записей!

структура таблицы 1

id - строка 001 - abcdefg

становится

структура таблицы 2

id - строка 001 - а 001 - б 001 - с , , , , , .

Я открыт для любых предложений, которые могли бы улучшить положение вещей.

Приветствия

Phil

Ответы [ 3 ]

1 голос
/ 19 мая 2009

При выполнении массовых вставок часто можно существенно повысить производительность, отбросив индексы таблицы, выполнив массовую вставку, а затем восстановив индексы. В одном случае, когда я вставлял пару миллионов записей в таблицу MySQL, я видел, как это сокращало время выполнения с 17 до примерно 20 минут.

Я не могу советовать конкретно относительно Access (я не использовал его с Access 2, 15 или около того лет назад), но общий метод применим практически ко всем ядрам баз данных.

1 голос
/ 19 мая 2009

Рассмотрим этот пример, используя Northwind. Создайте таблицу с именем Sequence с INTEGER (Access = Long Integer) и заполните ее значениями от 1 до 20 (то есть 20 строк таблицы). Затем используйте этот синтаксический код SQL ACE / Jet для анализа каждой буквы фамилий сотрудников:

SELECT E1.EmployeeID, E1.LastName, S1.seq, MID(E1.LastName, S1.Seq, 1)
  FROM Employees AS E1, Sequence AS S1
 WHERE S1.seq BETWEEN 1 AND LEN(E1.LastName);
0 голосов
/ 19 мая 2009

У нас есть процедура, которая транспонирует данные. Не уверен, что код оптимизирован, но после сжатия файла он работает значительно быстрее.

Большое количество операций по удалению и перестройке таблиц значительно увеличивает размер файла .mdb.

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