选择我有两个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