数据库
首页 > 数据库> > mysql – 我应该对表id列使用数据类型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.就字节宽度而言,较小的数字键总是比较大的数字键更快地处理.

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

>在聚集索引(a.k.a. gen_clust_index)中,主键的行数据和BTREE占用相同的空间
> InnoDB has a fixed size for an InnoDB Page

鉴于这两件事,主键越大,需要的空间越多,需要额外的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