咨询一个入门问题
关于主键哪种好
1.非业务主键,如int自增主键
2.业务主键,如商品档案表的"货号"
货品资料偶尔也可能会批量修改
我看了网上的资料说B树索引,如果是自增整数,那么insert时特别快,不用挪动顺序
但是,零售端输入一个货号来开单,或者盘点,需要快速在基础资料查询信息,那么,货号,应该也要建立索引,那么货号建立索引
那么这里想了解一下
现在新增一个资料
是不是int自增主键就会在最后加索引,而货号索引还是得自己去找适合自己的位置,之前货号索引该挪的还是得挪位置
那么问题来了,自增好像没有什么用了?
我的理解对吗?
我是刚接触这些,有哪位朋友给指导一下
我的理解是,新增一个货号,如果有多个索引,所有索引都要维护一遍
那么,货号总之都是要建立索引,直接用它作为主键,那自增索引好像就没有什么用了,不知道我的理解对不对,或者说这个自增主键还有其他特别好的用处,是货号这个主键无法替代的
本问题来自云栖社区【PostgreSQL技术进阶社群】。https://yq.aliyun.com/articles/690084 点击链接欢迎加入社区大社群。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
你的理解部分正确,但也存在一些误区。在数据库设计中,选择主键类型(业务主键或非业务主键)和索引策略时,需要权衡多个因素,包括性能、数据完整性、扩展性和易用性等。下面我来详细解释一下:
自增主键:
业务主键(如货号):
关于索引维护的问题,无论是自增主键还是业务主键,每当有新的记录插入或现有记录被修改(特别是涉及到索引列的修改),数据库引擎都会自动维护索引结构,确保索引的有效性。这意味着,不论是基于自增ID还是货号建立的索引,在插入或修改数据时,相关索引确实都需要更新。但是,自增ID由于其自然顺序,这种更新的成本通常较低。
至于你提到的“自增好像没有什么用了”,实际上并非如此。自增主键的一个重要优势在于它对写操作(尤其是大量连续插入)的优化,以及减少页分裂的发生,这对于高并发写入场景尤为重要。此外,自增ID不包含业务逻辑,可以避免因业务规则变化导致的数据迁移问题。
总结来说,选择哪种类型的主键取决于具体的应用场景和需求: - 如果系统有大量的写入操作,且对写入性能要求较高,自增主键可能是更好的选择。 - 如果业务上更倾向于通过具有实际意义的字段进行查询和关联,那么采用业务主键可能更为直观和方便,但需注意处理好数据变更带来的潜在问题,并合理设计索引来优化查询性能。
最后,无论选择哪种主键,合理的索引设计都是至关重要的,以确保查询效率。在某些情况下,结合复合索引(即同时包含自增ID和业务字段的索引)也是一个值得考虑的方案,可以在满足不同查询需求的同时平衡性能。