【发布时间】:2021-12-14 11:01:41
【问题描述】:
我对 SQL 还很陌生,因此在其他地方给出的指导上遇到了困难。
-
我有一个 170 万行 85 列的表格
-
“样品 ID”列为每个条目提供了一个标识符
-
数据会定期更新,并生成重复的样本 ID,并更改单独的字段(这是数据流的一部分)
-
但是,单位编号不会延续到样品 ID 上的新条目,因为这是根据更改的字段进行的计算的一部分
-
因此,我想使用填充它的样本 ID 中的单元号来填充它为 NULL 的地方
例如:
| Sample ID | Unit Number | +83 other columns |
|---|---|---|
| 00001A | NULL | |
| 00001A | 123_abc |
到
| Sample ID | Unit Number | +83 other columns |
|---|---|---|
| 00001A | 123_abc | |
| 00001A | 123_abc |
我已经成功地在一张小桌子上使用以下代码进行了测试:
UPDATE data_tabel as dt1, data_tabel as dt2
SET dt1.Unit Number = dt2.Unit Number
WHERE dt1.Sample ID = dt2.Sample ID AND dt1.Unit Number is NULL AND dt2.Unit Number != ''
也成功了:
UPDATE data_tabel as t1
INNER JOIN data_tabel as t2 ON
t1.Sample ID = t2.Sample ID AND
t2.Unit Number IS NOT NULL
SET t1.Unit Number = t2.Unit Number;
但是,当在我的完整数据表上运行此程序时,速度非常慢(到目前为止 1.5 小时并且还在增加)。
任何关于如何提高性能的建议将不胜感激。
谢谢。
【问题讨论】:
-
更新集中有多少行?我正在考虑将其分开,然后将数据折叠起来——包括 UnitNumber。
-
PRIMARY KEY是什么?请提供SHOW CREATE TABLE;您可以省略其他 83 列中的大部分,但要包括所有索引和被索引的列。