mysql serial_mysql – 我应该对表id列使用数据类型SERIAL吗?

我发现有一个名为SERIAL的mysql数据类型,它似乎被设计用作id列.但是我的一些同行并不认为SERIAL隐含的真实数据类型BIGINT适用于可能永远不会变大的表.

有没有理由避免对表id列使用SERIAL类型?

有没有明显的警告?

解决方法:

唯一真正的问题是尺寸.

如果桌子真的很小,为什么膨胀呢?例如,如果您的表永远不会超过255行,请使用TINYINT UNSIGNED作为id.无需使表格的列膨胀达8倍.这也适用于主键.

在加载包含数据的表后,您应该运行它

SELECT id FROM tablename PROCEDURE ANALYSE();

对于任何表< 4,294,967,296行,PROCEDURE ANALYSE()永远不会推荐BIGINT.就字节宽度而言,较小的数字键总是比较大的数字键更快地处理.

什么将进一步受害将是索引.为什么?

鉴于这两件事,主键越大,需要的空间越多,需要额外的InnoDB页面的可能性就越大.

因此,对于填充表,我的建议是让PROCEDURE ANALYSE()告诉正确的dataytpe.对于空表,尝试预测期望的值的数量,并将数据类型设置为以下值:

> id< POWER(256,1)(256),TINYINT UNSIGNED

> id< POWER(256,2)(65536),SMALLINT UNSIGNED

> id< POWER(256,3)(16777216),MEDIUMINT UNSIGNED

> id< POWER(256,4)(4294967296),INT UNSIGNED

标签:mysql,uniqueidentifier

来源: https://codeday.me/bug/20190806/1597390.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值