Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL表的复杂重排序_Mysql_Sql_Database - Fatal编程技术网

MySQL表的复杂重排序

MySQL表的复杂重排序,mysql,sql,database,Mysql,Sql,Database,我应该对非常复杂的表进行重新排序。 ****主表如下所示:*** id - some data 1 - ... 2 - ... 3 - ... 6 - ... 9 - ... 12 - ... 如您所见,有“空”ID(3和6之间没有4、5等) ****这张桌子应该是这样的**** id - data 1 - ... 2 - ... 3 - ... 4 - ... 5 - ... 6 - ... 7 - ... etc (without empty IDs) 我为什么要这样做:这是一个服务器数

我应该对非常复杂的表进行重新排序。

****主表如下所示:***

id - some data
1 - ...
2 - ...
3 - ...
6 - ...
9 - ...
12 - ...
如您所见,有“空”ID(3和6之间没有4、5等)

****这张桌子应该是这样的****

id - data
1 - ...
2 - ...
3 - ...
4 - ...
5 - ...
6 - ...
7 - ...
etc (without empty IDs)
我为什么要这样做:这是一个服务器数据库,包含数百万个ID。服务器在维护如此大的数据时崩溃。如果我重新排序ID,并且不会有任何空的ID,那么这个表中的最大ID将大大降低,这将防止服务器崩溃

最复杂的事情-此表在类似4-5个不同的表中有外键引用(至少只有ID列引用)

我的想法是-按ID对主表重新排序,不使用空ID,并使用(oldID,newID)结构创建新的临时表,然后在其他相关表中用newID替换oldID


你知道这个查询会是什么样子吗?执行该查询可能需要半个小时,但这是最小的问题。

除非您有非常神秘的查询,否则
id
列中的数字大小不会导致服务器崩溃。对于表中ID使用的数字大小,SQL是相当不可知的。除非有很好的理由并且知道其他表不引用ID,否则不应该更改ID。也许你应该问一个关于如何修复你正在使用的查询的问题。它是一个C++写的游戏服务器,在处理很多玩家的大ID号码时确实存在一些问题。我想根据我所描述的问题进行查询,并每月执行一次清理,这样,您需要修复C++代码。它不应该对用户ID进行假设。更改标识符/ID在大多数情况下都不是好主意。-同样重要的是,您需要一致地传播更改的ID。您将如何确定从旧ID切换到新ID的时间?如果存在对ID的外部引用,您甚至不应该再考虑它。如果您的应用程序确实存在/导致了问题,您可以尝试将临时/转换表连接到SQL结果集,并对列进行别名,以在已知名称下公开较小的值。要使其工作,所有新的
INSERT
s都需要添加到此翻译表中。应用程序必须处理的
INSERT
s/
UPDATE
s越多,这样做的乐趣就越小。除非您有非常神秘的查询,否则
id
列中的数字大小不会导致服务器崩溃。对于表中ID使用的数字大小,SQL是相当不可知的。除非有很好的理由并且知道其他表不引用ID,否则不应该更改ID。也许你应该问一个关于如何修复你正在使用的查询的问题。它是一个C++写的游戏服务器,在处理很多玩家的大ID号码时确实存在一些问题。我想根据我所描述的问题进行查询,并每月执行一次清理,这样,您需要修复C++代码。它不应该对用户ID进行假设。更改标识符/ID在大多数情况下都不是好主意。-同样重要的是,您需要一致地传播更改的ID。您将如何确定从旧ID切换到新ID的时间?如果存在对ID的外部引用,您甚至不应该再考虑它。如果您的应用程序确实存在/导致了问题,您可以尝试将临时/转换表连接到SQL结果集,并对列进行别名,以在已知名称下公开较小的值。要使其工作,所有新的
INSERT
s都需要添加到此翻译表中。应用程序必须处理的
INSERT
s/
UPDATE
s越多,这样做的乐趣就越小。