2012-02-03 3 views
1

У меня есть три таблицыОбъединение несколько больших таблиц

Table T1: Columns {a,b,c}, combination {a,b} is unique in Table T1 
Table T2: Columns {a,c,d}, combination {a,c} is unique in Table T2 
Table T3: Columns {a,c,e}, combination {a,c} is unique in Table T3 

где {а, Ь, с} является строками и {d, е} являются число

Я хочу, чтобы мой выход будет

Table T4: Columns {a,b} where e/d < x. 

Таблицы T1, T2, T3 все очень большие (миллионы строк), так что я реализовал это, выполнив левое соединение на таблице T1 T2 и сохраняя результаты в таблице temp, а затем сделав левое соединение на таблицы T1 T3 и сохранение результатов, затем выполнение левого соединения результатов и, наконец, объединение этих временных таблиц в 1 финальную таблицу.

Мой вопрос в том, есть ли лучший/более эффективный способ сделать это, не взорвав базу данных?

+0

Какие показатели у вас на этих таблицах? –

ответ

1

Вы пробовали просто сделать это прямолинейно?

select t1.a, t1.b 
into t4 
from t1 
join t2 on t1.a = t2.a and t1.c = t2.c 
join t3 on t1.a = t3.a and t1.c = t3.c 
where t3.e/t2.d < x 

Хранение миллионы записей в временных таблиц не подходит для работы или хранения ...

+0

Я согласен с этим, если база данных OP не очень подходит для хранения данных, это должно работать нормально. –

+0

Итак, возможно, я недостаточно понимаю SQL, но объединение делает декартово произведение (поэтому, если у меня есть две таблицы с 10 строками и одна с 10-миллиметровыми строками, она создаст таблицу из 100-миллиметровых строк и устранит). Нет? – user1167650

+0

Нет, если вы присоединяетесь к клавишам. Декартово произведение происходит только тогда, когда вы не присоединяетесь к клавишам. в вашем примере, если у вас есть FK в таблице строк 10mil в качестве PK из таблицы из 10 строк, тогда вы получите только 10mil строк, с данными из таблицы из 10 строк, включенной в набор результатов. –

Смежные вопросы