mysql - 如何获得最小的mysql行大小

标签 mysql

我正在 MySql (InnoDB) 中设计一个表,并希望确保它占用磁盘上的绝对最小空间。我的问题是:行存储大小是否取决于表中列的顺序?

例如,这是列顺序 1:

    bigint (8 bytes)
    tinyint (1 byte)
    int (4 bytes)
    int (4 bytes)
    tinyint (1 byte)

此表行占用的磁盘空间是否与本例中的行(顺序 2)不同:

    bigint (8 bytes)
    tinyint (1 byte)
    tinyint (1 byte)
    int (4 bytes)
    int (4 bytes)

或者这个(顺序 3):

    bigint (8 bytes)
    int (4 bytes)
    int (4 bytes)
    tinyint (1 byte)
    tinyint (1 byte)

我记得很久以前在一个顺序很重要的环境中工作(重要的是不要让字段跨 4 字节边界定位)。它在 MySQL 5.x 中有什么不同吗?

提前致谢。

最佳答案

当你有十亿条记录时,每条记录节省一个字节确实是十亿字节,但是在 1000 字节的记录上保存一个字节仍然只节省了 0.1%,无论记录的数量如何。这都是相对的。 :)

如果您想存储访问不频繁且访问速度不快的大量数据,那么您可能会从实际压缩数据的存储设施中获益更多。也许你可以看看 ARCHIVE MySQL的存储引擎:

https://dev.mysql.com/doc/refman/5.0/en/archive-storage-engine.html

它是一种特殊的存储引擎,在插入行时对其进行压缩。它没有索引,并且只支持 insertselect (没有 deleteupdate ),但对于只需要输出大量数据(日志记录等)的应用程序,它可能正是您要找的。

关于mysql - 如何获得最小的mysql行大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23047434/

相关文章:

具有 LIKE 和 AND 子句的 MySQL 查询

java - 从 Eclipse 连接到 MySQL

java - 如何使用 facebook 登录并获取用户信息以从 android 应用程序发送我的远程数据库

mysql - 我应该在这里使用什么样的 JOIN ?

mysql - datagridview单击事件句柄并打开新表单

php - 您是否应该进行超出正常用户事件可能性的验证检查?

PHP - 按动态键数对数组进行分组

PHP/MySQL - 令人困惑的查询

c++ - 通过 C++ 连接到 mySQL

mysql - 是否可以使用 SQL 语句在 MySQL Workbench 中创建表?