選擇我有兩個MySQL表,狀態和反式:MySQL的 - 優化跨兩個鏈接表
美國(200,000項)看起來像:
id (INT) - also the primary key
energy (DOUBLE)
[other stuff]
反式(1400萬個)的樣子:
i (INT) - a foreign key referencing states.id
j (INT) - a foreign key referencing states.id
A (DOUBLE)
我想用trans.A> 30.(比方說)來搜索trans中的所有條目,然後從每個匹配條目引用的(唯一)狀態中返回能量條目。所以我做了兩個中間表:
CREATE TABLE ij SELECT i,j FROM trans WHERE A>30.;
CREATE TABLE temp SELECT DISTINCT i FROM ij UNION SELECT DISTINCT j FROM ij;
SELECT energy from states,temp WHERE id=temp.i;
這似乎工作,但有沒有辦法做到沒有中間表?當我試圖從反式直創建一個命令臨時表:
CREATE TABLE temp SELECT DISTINCT i FROM trans WHERE A>30. UNION SELECT DISTINCT j FROM trans WHERE A>30.;
花了更長的(大概是因爲它不得不尋找大跨表兩次我是新來的MySQL,我可以」。不像是會找到一個等效的問題和答案在那裏的interwebs。 非常感謝, 基督教
謝謝對於你的回覆,Axarydax,但這不是我所需要的:我想要列出trans.i和trans.j聯合中的每個獨特(不同的)條目,使得trans.A> 30,在這個列表中的每個id,我想要它的state.energy值。 用你的方法,我只會得到與trans.j相匹配的那些id,並且我會在該列表中得到重複。 感謝您的幫助, Christian – xnx
已更新的原文 – Axarydax
再次感謝 - 我可以看到這將如何工作在一行。 但是,當我嘗試它時,命令需要很長時間才能執行(10分鐘,等待...),而使用中間表則需要不到10秒。 你知道是否有辦法在MySQL中優化你的命令嗎? – xnx