sql - 列式数据库优化与关系数据库优化有何不同?

标签 sql database-design relational-database query-optimization columnstore

我有以下数据库结构,存储在关系数据库中:

  • 两个事实表,每个约 8000 万行
  • 具有 300,000 - 500,000 行之间的三个维度表
  • 两个事实表都有 3 个外键,用于连接维度表
  • 一张安全表还有 3 个外键,用于连接维度表

  • 一位开发人员正在使用我的数据创建一个使用列式数据库的应用程序。他们一直遇到性能问题,当我建议向他们的表添加索引/键时,他们说索引列式数据库并不能提高性能。结果,他们要求我将事实表与维度表结合起来。

    这似乎与我所了解的数据库管理基本原则相矛盾。列式数据库真的不能使用索引来提高性能吗?应该采取哪些步骤来优化柱状性能?

    我正在寻求高层信息 ,但为了完整起见,关系型数据库是Teradata,列型数据库是SAP HANA。

    最佳答案

    在较高级别上,关系数据库和列式数据库之间的区别在于数据的存储方式。关系数据库按行存储记录,按列存储记录。

    例如:
    记录:

    Name          ID number        zip code
    smith         4444             98210
    jones         1234             10125
    

    RDBMS 按记录存储这是一个块:smith, 4444, 98210jones, 1234, 10125列式数据库按列将其存储在块中:smith, jones4444, 123498210, 10125
    您可以创建索引。在 HANA 中有 UNIQUE、BTREE、CPBTREE 索引。唯一值上的唯一索引——就像 RDBMS 中的主键一样,BTree 是二叉搜索树索引,CPBTREE 是压缩前缀 B+ 树索引。

    但是,在创建希望修复的索引之前评估性能问题很重要。查看日志,分析数据库并找出导致性能下降的原因。评论“开发人员正在使用我的数据创建使用列式数据库的应用程序”可能是问题的症结所在。每种数据库类型中存储和检索数据的方式完全不同。 RDBMS 更适合事务数据。因此,如果此应用程序正在利用列式数据库,那么它更适合高效搜索大量数据中的特定数据——因为只需要加载受影响的列,而不是整个记录。

    由于不同的数据库结构,此应用程序可能无法正确运行。

    关于sql - 列式数据库优化与关系数据库优化有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45425014/

    相关文章:

    mysql - 在插入查询中添加多个条件语句

    mysql - 将数据复制到另一个数据库后删除数据

    mysql - 如何搜索包含150+列的Mysql表?

    mysql - 关于我的业务逻辑的数据库设计

    mysql - 在数据库中建立多个表之间的关系

    mysql - 如何通过拆分列字符串来对列执行排序?

    Mysql,在 JSON 字段中搜索?

    mysql - devexpress特殊标志报告

    mysql - 如何在其他列中显示 1 列总和

    sql - 在此 SQL 模式中可以改进什么?