从另一个表更新新列:太慢

时间:2019-04-18 11:13:33

标签: mysql

我有一个很大的表,并决定通过从另一个表中引入一个具有ID的新列并删除其他两个列来减小其大小。这些是表格:

Table tests:
+---------------+----------------------+------+-----+---------+----------------+
| Field         | Type                 | Null | Key | Default | Extra          |
+---------------+----------------------+------+-----+---------+----------------+
| id            | bigint(20) unsigned  | NO   | PRI | NULL    | auto_increment |
| ml            | varchar(16)          | NO   |     | NULL    |                |
| test_num      | smallint(5) unsigned | NO   |     | NULL    |                |
........                                                                                                                   

Table data:
+-----------+----------------------+------+-----+---------+----------------+
| Field     | Type                 | Null | Key | Default | Extra          |
+-----------+----------------------+------+-----+---------+----------------+
| id        | bigint(20) unsigned  | NO   | PRI | NULL    | auto_increment |
| test_id   | bigint(20) unsigned  | NO   |     | NULL    |                |                                                                                                                   
| ml        | varchar(16)          | NO   |     | NULL    |                |                                                                                                                   
| test_num  | smallint(5) unsigned | NO   |     | NULL    |                |                                                                                                                   
........

因此,我在表{{1}中添加了新列test_id,并想用data中的id填充它,然后删除列tests和{{ 1}}。

我尝试使用ml来做到这一点:

test_num

此查询工作了三个小时,所以我取消了查询并尝试了另一个查询:

join

它执行了四个小时,我不知道它是否会在可预见的时间内完成。我的问题是:这些查询是否正确,更有效?还有其他方法可以满足我的需求吗?

1 个答案:

答案 0 :(得分:1)

您的查询速度很慢,因为您在联接中使用的列上没有索引,假设您有大量的数据。

var shortlist = list.Take(2).ToSortedList();

尝试添加索引,因为它也会减少以后查询的执行时间。