mysql - 在导入 MySQL 时将校验位从数字拆分为单独的列

标签 mysql sql database database-design relational-database

我是 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/

相关文章:

mysql - 更快地选择查询多个主键

mysql - 将表内容与外部文件进行比较 - SQL

sql - 加入两个窄格式表

mysql - 安全写入部分文件算法(原子部分写入)

mysql - 数据库设计 - 显示可用时间的最佳方式?

php - 我的 PHP 生成的 CSV 文件保存为 PHP 文件

MySQL多重PK

mysql - 是否可以进行这样的查询?

mysql - 如何在通过命令行导入 mysql 转储时跳过已创建的表

javascript - 高效地从 Ruby on Rails 中的联接表中提取值以在 javascript 中使用