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