我需要用另一个表中的值更新列。。。但它需要永远或中止。可以在多个交易所(mic)列出特定的证券(isin)。。。所以我想我需要有两个条件在内部连接。。。在(??)上。我的尝试是否正确?我在表中有大约170000条记录,其中有40000个独立的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\u live中,为isin列和mic列创建一个新索引?索引名和索引类型(primary、index、unique、fulltext)如何?大小?
3条答案
按热度按时间6ojccjat1#
正如评论人士所指出的,既然你已经设置了索引,我建议你试着做这些零碎的工作。每次跑5公里,直到完成为止。试试10公里。显然你不能做170k或40k。我曾经有过很多次,一个数据库有数百万行,而我一次只能找到10万行或更少的行。这是因为硬件的限制。
例如,
您可能希望使用order by,这样您就知道哪些记录是什么,并且需要跟踪哪些记录已更新。
看这里,
如何更新sql server中的前100条记录
抱歉,我刚看到你在用mysql,
mysql-带限制的更新查询
hec6srdp2#
对于此查询:
我建议在
securities_prev(isin, mic, close)
.但是,我怀疑您正在更新所有或几乎所有的记录。如果是这样的话,通常截断表并用
insert
.Update
最好用于更新相对较少的行。sxissh063#
试试这个: