第一次使用TiDB,接手的项目很多使用decimal(20,0) decimal(30,0) 这种类型作为主键,请问tidb是对这种类型有特殊优化吗,我不明白为啥要使用这种类型作为主键?

第一次使用TiDB,接手的项目很多使用decimal(20,0) decimal(30,0) 这种类型作为主键,请问tidb是对这种类型有特殊优化吗,我不明白为啥要使用这种类型作为主键?这和我的认知有很大差别,在我的认知中,只有涉及小数字段计算的字段才使用decimal类型。请tidb高手帮忙解惑,是我们项目主键类型使用错误吗,可以使用varchar(30) 替换吗

decimal不是主要金额采用的字符类型吗?精确计算,避免了舍入误差,能定义小数位同时范围还很大,varchar和它不搭噶吧,varchar不是纯字符串类型吗?

我知道decimal主要用做金额等计算的字段,我疑惑的是使用decimal做主键的意义。是不是可以这么理解,设计人员可能考虑了使用超过BIGINT 范围的整数做主键decimal(30,0),性能比使用字符串类型的高。

数字一般都比字符串性能高不少

你的意思就是每个表单独无含义的主键ID,都选了decimal(30,0)这种类型?那为啥不用bigint呢?

对的,bigint的范围没有这么大

bigint

TiDB没有这种建议,都是建议使用bigint,这个做法肯定不是因为tidb的建议搞的,应该问问设计的人

1 个赞

但是decimal做主键,建的不是聚簇索引表啊。。。

在 TiDB 中,使用 decimal(20,0) 或 decimal(30,0) 等 decimal(20,0) 或 decimal(30,0) 作为主键是一种有效的做法。 TiDB 确实对 decimal 类型做了特殊的优化,以保证高效的存储和计算。

使用小数类型作为主键的决定取决于项目中数据的特定要求和特征。 这里有几点需要考虑:

精度和小数位数:小数类型允许以指定的精度和小数位数精确存储和计算小数。 如果您的主键值表示小数并且需要特定级别的精度和小数位数,则使用小数类型可以确保数据表示的准确性。

取值范围:如果主键取值范围很广,需要覆盖大量的十进制数字,十进制类型可以满足这样的要求。 它允许您根据需要定义精度和比例,提供表示各种数值的灵活性。

排序和比较:小数类型支持排序和比较操作,这对主键来说是必不可少的。 如果您的主键值需要根据其十进制表示形式进行排序或比较,则使用小数类型是合适的。

关于使用 varchar(30) 替代主键中的 decimal 类型,这取决于数据的性质以及您打算如何使用主键。 Varchar 类型适用于某些场景,例如当主键值表示字母数字代码或标识符时。 但是,与 decimal 类型相比,varchar 类型具有不同的排序和比较行为。 确保所选数据类型符合主键的预期用途和要求非常重要。

要确定项目中的主键类型是否使用正确,考虑特定用例、数据特征和性能要求至关重要。 向熟悉项目设计和需求的原始项目团队或 TiDB 专家咨询可能会有所帮助。 他们可以针对您的特定场景提供更多见解和指导。

总的来说,在 TiDB 中使用 decimal 类型作为主键的决定是一种有效的方法,它为高效的存储和计算提供了优化。 但是,必须评估项目的要求并根据主键值的特定需求考虑替代数据类型,例如 varchar。

就算varchar主键也是聚簇表,除非你不给主键 默认有都是

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。