Nic*_*gan 5 sql database-design query-optimization relational-database columnstore
我有以下数据库结构,存储在关系数据库中:
一位开发人员正在使用我的数据创建一个使用列式数据库的应用程序。他们一直遇到性能问题,当我建议向他们的表添加索引/键时,他们说索引列式数据库并不能提高性能。结果,他们要求我将事实表与维度表结合起来。
这似乎与我所了解的数据库管理基本原则相矛盾。列式数据库真的不能使用索引来提高性能吗?应该采取哪些步骤来优化柱状性能?
我在寻求高层信息,但为了完整起见,关系数据库是Teradata,列数据库是SAP HANA。
小智 4
从较高的层面来看,关系数据库和列式数据库之间的区别在于数据的存储方式。关系数据库按行存储记录,按列存储记录。
例如: 记录:
Name ID number zip code
smith 4444 98210
jones 1234 10125
Run Code Online (Sandbox Code Playgroud)
RDBMS 按记录块存储:smith, 4444, 98210 并且 jones, 1234, 10125
列式 DB 按列块存储 : smith, jones 并且 4444, 123498210, 10125
您可以创建索引。HANA中有UNIQUE、BTREE、CPBTREE索引。唯一值上的唯一索引 - 就像 RDBMS 中的主键一样,BTree 是二叉搜索树索引,CPBTREE 是压缩前缀 B+ 树索引。
然而,在创建希望修复的索引之前评估性能问题非常重要。查看日志,分析数据库并找出导致性能缓慢的原因。“开发人员正在使用我的数据创建一个使用列式数据库的应用程序”这一评论可能是问题的症结所在。每种数据库类型中存储和检索数据的方式完全不同。RDBMS 更适合事务数据。因此,如果此应用程序利用列式数据库,那么它更适合在大量数据中有效搜索特定数据 - 因为只需要加载受影响的列,而不是整个记录。
由于数据库结构不同,该应用程序可能无法正确运行。