2015-03-24 6 views
-2

Это мой запрос:Как я могу выполнить этот запрос быстрее?

create table vi_all as 
    select 
    d.primaryid, d.age, d.gndr_cod, d.wt, d.wt_cod, d.reporter_country, 
    dr.primaryiddrug, dr.role_cod, dr.drug_name, 
    r.primaryidreac, r.pt, 
    o.primaryidoutc, o.outc_cod, 
    i.primaryidindi, i.indi_pt 
    FROM demo d, 
     drug dr, 
     reac r, 
     outc o, 
     indi i; 

Каждая таблица содержит по крайней мере 80K записей и более 20 полей так что его действительно становится трудно выполнить отборное заявление на нескольких таблиц; и я просто хочу 4 или 3 поля из каждой таблицы, поэтому я подумал об этом, но вышеупомянутый запрос занял более 5 часов, но все же не дал никакого результата.

+6

Пока вы ждете, что вы потеряли память/диск, вы можете использовать «декартовой продукт» Google. Вам нужно будет присоединиться к таблицам на их ключах и внешних ключах. Если вы не знаете, что это значит, вам нужно исследовать SQL и понять, как построить внутренние/внешние соединения. – justAnotherUser

+0

Не могли бы вы показать нам свою структуру таблиц? какие поля присоединяются к записям таблицы? если вы предоставляете инструкцию 'CREATE TABLE' для каждой таблицы и/или sqlfiddle, что могло бы помочь – Alex

ответ

0

Мой хрустальный шар говорит вам нужно что-то вроде этого:

create table vi_all as 
    select 
    d.primaryid, d.age, d.gndr_cod, d.wt, d.wt_cod, d.reporter_country, 
    dr.primaryiddrug, dr.role_cod, dr.drug_name, 
    r.primaryidreac, r.pt, 
    o.primaryidoutc, o.outc_cod, 
    i.primaryidindi, i.indi_pt 
    FROM demo d 
    LEFT JOIN drug dr ON d.drug=dr.id 
    LEFT JOIN reac r ON d.reac=r.id 
    LEFT JOIN outc o ON d.outc=o.id 
    LEFT JOIN indi i ON d.indi=i.id; 

Насколько я могу сказать, ваш запрос выбирает все результаты из всех таблиц, но не assocating их в любом случае это так, вы можете, возможно, получить дубликаты данных в вновь созданной таблице. Кроме того, если у вас есть хорошие внешние ключи для связывания этих таблиц, производительность будет значительно лучше.