早上好。
我有一个缺少行的表(由于先前的删除),我需要通过填充“空洞”来“压缩”表,以使ID成为顺序的,从而保留记录的顺序。
例如MyTable:
| ID |姓名||
| 1 || A ||
| 2 || B ||
| 5 || C
| 8 || D | p>
| 9 || E
...
必须成为:
| ID |姓名||
| 1 || A ||
| 2 || B ||
| 3 || C
| 4 || D | p>
| 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条记录表需要花费几个小时。
有什么想法可以加快这一过程吗?
非常感谢!