在PolarDB中,列存索引(如IMCI)对于大数据量和复杂查询的场景能够显著提升查询性能。但是,并非所有表都适合或者需要使用列存索引,盲目地为所有表添加列存索引可能会带来以下副作用:
存储成本增加:
列存索引会额外占用存储空间,虽然其压缩率较高,但仍然会导致存储资源消耗增大。
写入性能影响:
列存索引在更新时可能不如行存索引高效,因为每次对表进行插入、更新或删除操作时,涉及列存索引字段的变更都需要维护对应的索引结构,这在高并发写入场景下可能会导致写入性能下降。
维护开销增加:
随着数据的变化,列存索引也需要定期合并与优化以保持查询效率,这将增加系统后台处理的负载和时间。
适用场景有限制:
列存索引特别适用于OLAP(在线分析处理)场景,即针对特定列的大规模批量查询,而非日常事务处理(OLTP)。如果表主要用于支持频繁的小范围查询或事务处理,那么列存索引的效果可能并不明显,甚至可能由于增加了不必要的索引而拖慢查询速度。
选择合适的列:
有效使用列存索引要求根据业务查询需求选择合适的列创建索引,不是所有列组合都适合建立列存索引,需要仔细分析和测试。
因此,在PolarDB中给所有表加上列存索引并不是最佳实践,应根据实际的业务需求、数据模型和查询模式来合理设计和选择索引类型及索引列。
首先最明显的就是占用存储啊!占用存储,造成最明显的后果就是会影响性能,然后维护的成本要增加。而且建立太多的索引,虽然查询效率会提高,但是新增和修改效率会变低。
存储开销(行存的30%左右),内存开销。如果有明确的业务SQL 可以参考文档
https://help.aliyun.com/zh/polardb/polardb-for-mysql/user-guide/batch-obtain-the-ddl-statements-used-to-create-imcis?spm=a2c4g.11186623.0.i3#main-2260649 因为每个表的列存索引都会产生一定的内存占用,那么加的太多 可能会导致实例的内存水位偏高 存在OOM的风险。此回答整理自钉群“PolarDB专家面对面 - HTAP(列存索引)”
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
PolarDB 分布式版 (PolarDB for Xscale,简称“PolarDB-X”) 是阿里云自主设计研发的高性能云原生分布式数据库产品,为用户提供高吞吐、大存储、低延时、易扩展和超高可用的云时代数据库服务。