全局二级索引面临着哪些问题?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
全局二级索引(GSI)在设计与使用中可能面临以下问题:
不支持特定表类型:GSI不适用于单表或广播表。尝试在这些表上创建GSI会导致错误。单表是指未进行任何拆分的逻辑表,而广播表则是在所有数据节点上有完全相同数据拷贝的表。
引擎与表结构限制:GSI仅能在InnoDB引擎上的分区表创建,不兼容混合分区表、压缩表、临时表、加密表以及特定行格式(如REDUNDANT和COMPRESSED)的表。此外,主键列和生成列不能用于创建GSI。
DDL操作限制:对已建GSI的表执行某些分区级别的DDL变更(除新增RANGE或LIST分区外),可能会导致GSI失效,需要重新构建。
索引类型限制:GSI不能是全文索引或空间索引。
写放大问题:在非IMMUTABLE
属性的索引中,更新或删除操作可能导致额外的读取主表步骤,增加写操作的复杂度和潜在的性能开销。
跨分片查询性能瓶颈:在未使用GSI前,如果查询条件不包含分区键,会引发跨分片查询,影响性能,如查询卡慢、连接池耗尽等问题。
索引维护成本:虽然GSI能提升查询效率,但其维护成本包括存储空间占用及写操作时的额外开销需被考虑。
并行DDL与特性支持差异:利用并行DDL创建GSI等增强特性有版本要求,集群版本需为PolarDB MySQL版8.0.2及以上且修订版本满足特定条件。
综上所述,用户在规划和应用全局二级索引时,需充分考量上述限制与挑战,以确保系统设计既满足查询优化需求,又避免引入新的问题。