mysql - 如果将 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 个客户端提供服务,为什么不呢?
解决方案
INT
除非您有特定的、可衡量的问题,否则请使用。如果你在一个即使是最节俭的智能手机也有十亿个字节用于内存的时代,你只会把事情弄得一团糟。
我需要数据库大小尽可能小以适应 RAM 以减少硬盘请求。
不,你没有。您需要数据库易于使用并能充分发挥作用。在 SSD 支持的数据库时代,I/O 不会成为问题,除非您进行大规模操作,并且当那一天到来时,您可以进行测量并了解您遇到的具体问题。
从您的字段中删除一个字节INT
不太可能使任何事情变得更好,因为三个字节的整数值不是您的 CPU 可以直接处理的。这些将被转换为四个字节并正确对齐以便可以理解,与读取普通的旧 32 位整数相比,这是一个混乱的过程。
请记住,MySQL 来自一个高端服务器拥有 64 MB内存和 9 GB硬盘被认为是巨大的时代。那时您确实必须减少字节数,因为您只有少数几个字节。
现在我们还有其他问题,比如您是否会像Slashdot 那样在他们的网站出现故障时意外耗尽您的 24 位整数空间,因为您正打算在这里进行那种“优化”。
当心。当你有具体理由时进行优化,而不仅仅是因为你认为你需要这样做。避免过早的优化是开发中的一项持续斗争,但如果你有纪律,你可以避免它。
推荐阅读
- excel - 使用带有 VBA 的表格从另一个工作表复制和粘贴
- python - 在 python 3.6.8 中使用正则表达式的语法无效
- java - 每当我注销时应用程序崩溃,使用firebase进行身份验证
- git - Jenkins-trigger- BitBucket webhook 网络错误问题
- node.js - 返回 api rest with node
- msal.js - 是否建议在 MSAL 中将 loginPopup 或 acquireTokenPopup 用于 Web 应用程序?
- node.js - 护照认证和登录重定向
- apache-spark - 在 Spark Streaming 上使用 HiBench 基准测试时如何设置 blockInterval?
- r - 如何使用ggplot2绘制与排序点叠加的箱线图
- python - 在 AWS Lambda Python 中导航事件