【发布时间】:2018-07-03 13:40:05
【问题描述】:
我需要用另一个表中的值更新一列……但这需要永远或中止。可以在多个交易所(麦克风)中列出特定的证券(isin)......所以我认为我需要在 INNER JOIN 中有两个条件...... ON(??)。我的以下尝试正确吗?我在表中有大约 170,000 条记录,其中包含 40,000 个唯一的 isins。
第一次尝试:
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)呢?尺寸?
【问题讨论】:
-
唯一能想到的可能有帮助的可能是在一个或两个表上添加索引以加快更新中的连接。
-
如果你已经有了合适的索引,但仍然很慢,你还应该确保两个表之间的 isin 和 mic 的数据类型相同。看看你的
execution plan,看看你是否能发现任何问题(例如表扫描,或者优化器选择了错误的索引)
标签: mysql sql join inner-join