У меня около 15 таблиц, каждая из которых содержит около 10 столбцов и почти 1 миллион строк данных.Как добавить таблицы «Боковые» в SQL
Все 15 таблиц имеют одинаковые первичные ключи, которые я могу использовать для их объединения.
Например ..
Таблица 1 - Столбцы ABCDE
Таблица 2 - Столбцы ABFGH
Таблица 3 - Столбцы ABIJK
Таблица 4 - Столбцы ABLMN
и т.д .. где А & В являются первичные ключи
что мне нужно будет один огромный стол, который выглядит следующим образом ..
mainTable - Столбцы АБВГДЕЖ ... MN
Прямо сейчас, что я сделал:
- Начните с таблицы 1 в качестве моей «главной» таблицы
- Измените таблицу, чтобы добавить все столбцы .. (т. F G H .. L M N)
- использовать команду UPDATE для заполнения в "основной" таблицы
update mainTable set
F = a.F,
G = a.G,
H = a.H
from mainTable left join Table2 a on
mainTable.A = a.A and
mainTable.B = a.B
(rinse and repeat for each of the 15 tables)
Это, кажется, работает, просто, что это ужасно неэффективно. Требуется возраст, чтобы присоединиться к одной таблице.
Есть ли альтернативный/более быстрый способ выполнения этой задачи?
Почему вы используете 'LEFT JOIN'? Это заставит значения «NULL», если соответствующие клавиши не существуют в таблице2 * (и таблице3 и т. Д.) *. Это верно? Кроме того, знаете ли вы, что каждый ключ из 'mainTable' существует только * (не более) * один раз, в других таблицах? Далее * (а также частично в ответ на последний вопрос) *, есть ли у вас индексы и/или ограничения первичного ключа, применяемые во всех таблицах? Обеспечение быстрого соединения? Наконец, есть причина, по которой вы не можете сделать все это одним обновлением с помощью 'main LEFT JOIN LEFT JOIN b LEFT JOIN c и т. Д. И т. Д.?? – MatBailie
Привет, Dems, я уверен, что соответствующие ключи существуют во всех таблицах и что ключ в mainTable уникален. Ограничения основного ключа не применяются в этой таблице, и я не слишком уверен, что вы подразумеваете под быстрым подключением. Я мог бы сделать все это одним массовым обновлением, но когда я пробую его всего за 2 таблицы, для завершения обновления уже требуется 15-25 минут. Вот почему я здесь ищу более эффективную альтернативу – d0h
Что я имею в виду заключается в том, что без индекса или ограничения первичного ключа в каждой из ваших таблиц соединения будут очень медленными. Это похоже на вырывание миллиона страниц из книги и прошу вас сопоставить их с миллионами страниц, вырванных из другой книги. Если они помещены в один и тот же порядок, это тривиальная работа. Если они разбросаны aroudn (без индекса или ограничения PK), тогда вы сойдете с ума. – MatBailie