我需要用另一个表中的值更新列。。。但它需要永远或流产。特定安全(isin)可以在多个交易所(mic)列出。。。所以我认为我需要有两个条件在内部连接。。。在??). 我下面的尝试正确吗?我在表中有大约17万条记录,其中有4万个唯一的isin。
第一次尝试:
SQL:
SET SESSION SQL_BIG_SELECTS = 1;
UPDATE securities_live t1
INNER JOIN securities_prev t2
ON t1.isin = t2.isin AND t1.mic = t2.mic
SET t1.prev_close = t2.close;
第二次尝试:
SQL:
SET SESSION SQL_BIG_SELECTS = 1;
UPDATE securities_live t1
INNER JOIN securities_prev t2
ON (t1.isin = t2.isin AND t1.mic = t2.mic)
SET t1.prev_close = t2.close;
目前编辑两个表的相关索引:
Indexes (securities_live):
Primary|Unique=Yes|Packed=no|Column=id|Cardinality=166776|Collation=A
Indexes (securities_prev):
Primary|Unique=Yes|Packed=no|Column=id|Cardinality=166776|Collation=A
在这两个表中,列“id”上都有主键。例如,在表securities中,live“创建一个新索引”,一个用于列isin,另一个用于列mic?索引名和索引类型(Primary、Index、Unique、Fulltext)如何?尺寸?
最佳答案
对于此查询:
UPDATE securities_live t1 INNER JOIN
securities_prev t2
ON t1.isin = t2.isin AND t1.mic = t2.mic
SET t1.prev_close = t2.close;
我建议在
securities_prev(isin, mic, close)
上建立一个索引。但是,我怀疑您正在更新所有或几乎所有记录。如果是这样的话,通常会更快地截断表并用
insert
重新填充它。Update
最好用于更新相对较少的行。关于mysql - 内部联接多个属性不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51156078/