开发者社区 > PolarDB开源 > PolarDB 分布式版 > 正文

在PolarDB给所有表都加上列存索引会不会有什么副作用?

在PolarDB给所有表都加上列存索引会不会有什么副作用?

展开
收起
三分钟热度的鱼 2023-12-28 19:52:06 66 0
3 条回答
写回答
取消 提交回答
  • 在PolarDB中,列存索引(如IMCI)对于大数据量和复杂查询的场景能够显著提升查询性能。但是,并非所有表都适合或者需要使用列存索引,盲目地为所有表添加列存索引可能会带来以下副作用:

    1. 存储成本增加
      列存索引会额外占用存储空间,虽然其压缩率较高,但仍然会导致存储资源消耗增大。

    2. 写入性能影响
      列存索引在更新时可能不如行存索引高效,因为每次对表进行插入、更新或删除操作时,涉及列存索引字段的变更都需要维护对应的索引结构,这在高并发写入场景下可能会导致写入性能下降。

    3. 维护开销增加
      随着数据的变化,列存索引也需要定期合并与优化以保持查询效率,这将增加系统后台处理的负载和时间。

    4. 适用场景有限制
      列存索引特别适用于OLAP(在线分析处理)场景,即针对特定列的大规模批量查询,而非日常事务处理(OLTP)。如果表主要用于支持频繁的小范围查询或事务处理,那么列存索引的效果可能并不明显,甚至可能由于增加了不必要的索引而拖慢查询速度。

    5. 选择合适的列
      有效使用列存索引要求根据业务查询需求选择合适的列创建索引,不是所有列组合都适合建立列存索引,需要仔细分析和测试。

    因此,在PolarDB中给所有表加上列存索引并不是最佳实践,应根据实际的业务需求、数据模型和查询模式来合理设计和选择索引类型及索引列。

    2023-12-29 23:22:46
    赞同 展开评论 打赏
  • 是个只会写bug的程序媛啊!!!

    首先最明显的就是占用存储啊!占用存储,造成最明显的后果就是会影响性能,然后维护的成本要增加。而且建立太多的索引,虽然查询效率会提高,但是新增和修改效率会变低。

    2023-12-29 17:32:54
    赞同 展开评论 打赏
  • 存储开销(行存的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(列存索引)”

    2023-12-28 20:04:26
    赞同 展开评论 打赏

PolarDB 分布式版 (PolarDB for Xscale,简称“PolarDB-X”) 是阿里云自主设计研发的高性能云原生分布式数据库产品,为用户提供高吞吐、大存储、低延时、易扩展和超高可用的云时代数据库服务。

相关电子书

更多
云栖大会:开源 PolarDB 架构演进、关键技术与社区建设 立即下载
2023云栖大会:和客户一起玩转PolarDB新特性 立即下载
2023云栖大会:PolarDB for AI 立即下载