首页 > 解决方案 > 如果将 INT 列更改为 MEDIUMINT,我将节省多少大小?

问题描述

MEDIUMINT我正在学习如何通过为列重新选择正确的数据类型来优化我的数据库,我想知道如果我选择(3 字节)而不是INT(4 字节)我将节省多少大小

AFAIK - 如果我错了,请纠正我 - 我需要数据库大小尽可能小以适合 RAM 以减少硬盘请求。数据库的大小由表大小 + 索引大小组成

假设我有一INT列有 10'000'000 行和一个 B-Tree 索引,如果我将列的数据类型从INT更改MEDIUMINT

注意:我知道 MySQL 不会减少磁盘上的实际大小,除非我OPTIMIZE TABLE

编辑:我的情况是我将很快完成我生命中的第一个严肃的系统 - 这是我计划在阿拉伯地区市场销售的 ERP 系统 - 。计划 1、2、3、4 的数据库应该分别约为 2GB、4GB、10GB、40GB,所以如果我可以在不牺牲性能/功能的情况下减小每个数据库的大小,为什么不呢?如果我可以让一台 32GB RAM 的机器为 4 个客户端而不是 2 个客户端提供服务,为什么不呢?

标签: mysqlsqldatatypesdatabase-optimization

解决方案


INT除非您有特定的、可衡量的问题,否则请使用。如果你在一个即使是最节俭的智能手机也有十亿个字节用于内存的时代,你只会把事情弄得一团糟。

我需要数据库大小尽可能小以适应 RAM 以减少硬盘请求。

不,你没有。您需要数据库易于使用并能充分发挥作用。在 SSD 支持的数据库时代,I/O 不会成为问题,除非您进行大规模操作,并且当那一天到来时,您可以进行测量并了解您遇到的具体问题。

从您的字段中删除一个字节INT不太可能使任何事情变得更好,因为三个字节的整数值不是您的 CPU 可以直接处理的。这些将被转换为四个字节并正确对齐以便可以理解,与读取普通的旧 32 位整数相比,这是一个混乱的过程。

请记住,MySQL 来自一个高端服务器拥有 64 MB内存和 9 GB硬盘被认为是巨大的时代。那时您确实必须减少字节数,因为您只有少数几个字节。

现在我们还有其他问题,比如您是否会像Slashdot 那样在他们的网站出现故障时意外耗尽您的 24 位整数空间,因为您正打算在这里进行那种“优化”。

当心。当你有具体理由时进行优化,而不仅仅是因为你认为你需要这样做。避免过早的优化是开发中的一项持续斗争,但如果你有纪律,你可以避免它。


推荐阅读