我是 MySQL 的新手,我有一个数据库,我将它放在 MySQL 中用于分析目的。它由载入、规范化和链接的平面文件(每个文件有几千兆字节)构建而成。数据一旦进入就会是静态的。更新包括截断所有表并放入新数据,但它会运行许多要求苛刻的查询。
几乎所有的 key 都是基于 10 位数字,最后一位是校验位。如果我可以将该校验位拆分到一个单独的列中,我的 key 可以从 8 字节 bigints 变为 4 字节 ints。这应该是一个巨大的性能提升。
有一个逐行遍历这些表的过程会非常慢(服务器是我的桌面)。有没有更有效的方法将这些最后的数字拆分成一个单独的列?还是我完全错误地认为这会提高性能?
提前致谢!
最佳答案
如果您使用的是 64 位服务器,那么我怀疑从 8 字节(64 位)bigints 到 4 字节(32 位)int 的转变会给您带来很多(如果有的话)性能提升 - 您仍然会做大部分事情一次操作中的事情。不过,它很可能会大大减少用于数据库的空间。
如果您想继续尝试,我认为最快的方法是在执行原始插入时对键进行子字符串化 - 您已经检索到数据,因此您没有任何需要 SELECT 或 UPDATE,您只需在 INSERT 中做更多的工作……无论如何您都要做。插入额外字段和两个子字符串的开销应该是最小的。
关于mysql - 在导入 MySQL 时将校验位从数字拆分为单独的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26557103/