紧凑的mySql表缺少记录

时间:2019-01-25 12:43:18

标签: mysql

早上好。

我有一个缺少行的表(由于先前的删除),我需要通过填充“空洞”来“压缩”表,以使ID成为顺序的,从而保留记录的顺序。

例如MyTable:

| ID |姓名||

| 1 || A ||

| 2 || B ||

| 5 || C

| 8 || D

| 9 || E

...

必须成为:

| ID |姓名||

| 1 || A ||

| 2 || B ||

| 3 || C

| 4 || D

| 5 || E

...

此刻我正在使用三个查询。

第一个是SELECT,它搜索表中的第一个丢失的记录:

SELECT MIN(t1.ID+1) AS FirstHole FROM MyTable t1 LEFT OUTER JOIN MyTable t2 ON t2.ID=t1.ID+1 WHERE t2.ID IS NULL GROUP BY t1.ID LIMIT 1;

第二个查询使用找到的ID(例如$ gap = 3)查找“空”之后的下一个ID:

SELECT MIN(ID) AS FirstRecAfterHole FROM MyTable WHERE ID>$gap;

(例如$ next = 5)

第三个查询是一个简单的UPDATE,它使用找到的ID来压缩表:

UPDATE MyTable SET ID=$gap WHERE ID=$next;

此循环可以完成工作,但速度非常慢:压缩约有30%的丢失行的100.000条记录表需要花费几个小时。

有什么想法可以加快这一过程吗?

非常感谢!

0 个答案:

没有答案