导入MySQL时,将数字中的校验位拆分为单独的列

导入MySQL时,将数字中的校验位拆分为单独的列,mysql,sql,database,database-design,relational-database,Mysql,Sql,Database,Database Design,Relational Database,我是MySQL的新手,我已经有了一个数据库,我正在MySQL中建立这个数据库,以便进行分析。它是从加载、规范化和链接的平面文件(每个文件有几GB)构建的。一旦数据进入,它就是静态的。更新包括截断所有的表并放入新的数据,但它会运行许多苛刻的查询 几乎所有的钥匙都基于10位数字,最后一位数字是校验位。如果我能把那个校验位拆分成一个单独的列,我的键可以从8字节的bigint到4字节的int。这应该是一个巨大的性能提升 让一个过程逐行遍历这些表会非常慢(服务器是我的桌面)。有没有更有效的方法将这些最后的

我是MySQL的新手,我已经有了一个数据库,我正在MySQL中建立这个数据库,以便进行分析。它是从加载、规范化和链接的平面文件(每个文件有几GB)构建的。一旦数据进入,它就是静态的。更新包括截断所有的表并放入新的数据,但它会运行许多苛刻的查询

几乎所有的钥匙都基于10位数字,最后一位数字是校验位。如果我能把那个校验位拆分成一个单独的列,我的键可以从8字节的bigint到4字节的int。这应该是一个巨大的性能提升

让一个过程逐行遍历这些表会非常慢(服务器是我的桌面)。有没有更有效的方法将这些最后的数字分割成一个单独的列?还是我完全错了,以为这会提高性能


提前谢谢

如果您使用的是64位服务器,那么我怀疑从8byte(64位)bigint移动到4byte(32位)int会给您带来很大的性能提升(如果有的话)——您仍然可以在一次操作中完成大部分工作。不过,它可能会为数据库提供相当大的空间


如果您想继续尝试,我认为最快的方法是在执行原始插入时对键进行子串-您已经检索到数据,因此您不需要选择或更新,您只需在插入中执行稍多的工作…无论如何,您都将要这样做。插入额外字段和两个子字符串的开销应该是最小的。

如果您不知道它是否会提高性能,那么您应该测试性能。在设置好它之前,我无法测试性能,这是当前的问题。要测试表的性能,请创建表,用随机数据填充它们,并衡量绩效。要测试分隔校验位,请编写SQL语句、sed脚本或awk脚本。