我有以下数据库结构,存储在关系数据库中:
一个开发人员正在使用我的数据创建一个应用程序,该应用程序使用了一个柱状数据库。他们一直存在性能问题,当我建议为他们的表添加索引/键时,他们说索引列数据库并不能提高性能。因此,他们要求我将事实表与维度表结合起来。
这似乎与我所知道的数据库管理的基本原则相矛盾。列数据库不能使用索引来提高性能,这是真的吗?应该采取哪些步骤来优化柱状的性能?
我正在寻找高级别的信息,但是为了完整起见,关系数据库是,而柱状数据库是SAP。
发布于 2017-10-19 12:11:31
在高层次上,关系数据库和列数据库之间的区别在于数据的存储方式。关系数据库的存储记录按行,列按列。
例如:记录:
Name ID number zip code
smith 4444 98210
jones 1234 10125
RDBMS按记录存储这是块:smith, 4444, 98210
和jones, 1234, 10125
,柱状DB按列存储这一点:smith, jones
、4444, 1234
和98210, 10125
您可以创建索引。HANA有独特的,BTREE,CPBTREE指数。在关系数据库管理系统中,BTree是一个二进制搜索树索引,CPBTREE是压缩前缀B+树索引。
但是,在创建希望修复的索引之前,评估性能问题是很重要的。查看日志,分析DB并找出导致性能缓慢的原因。“开发人员正在使用我的数据创建一个使用柱状数据库的应用程序”可能是问题的症结所在。在每种数据库类型中存储和检索数据的方式完全不同。RDBMS更适合于事务性数据。因此,如果这个应用程序利用了柱状数据库,那么它更适合高效地搜索大量数据中的特定数据--因为只需要加载受影响的列,而不是整个记录。
由于不同的DB结构,此应用程序可能无法正确运行。
发布于 2017-10-17 13:40:11
我不太熟悉SAP,但通常Columnstore数据库没有传统关系意义上的索引。相反,每一列都像一个单独的索引。
这种类型的DB通常可以很好地用于分析性查询,因为它们通常读取大量数据。例如,任何事实表,其中一个维度的Foreign传统上会有很多重复的值(假设维度的行要比事实表小得多)。
如果将行插入到按此列排序的事实表中,则可能会在表中实现出色的压缩级别,因此读取表所需的磁盘I/O要少得多。
ie: col_fk_to_dim =1,1,1,1,2,2,2,3,3,3,3,3,3,3,3,4,5,5,5,5,5,5,5.
可压缩为1x5,2x3,3x6,4x1,5x5,.
此外,如果系统分布在几个节点上,则需要考虑分发密钥,以确保每个节点都具有要处理的数据的类似共享。
如果您有性能问题,我首先要检查的是针对这些表启动的查询。接下来,检查它们要连接的列,看看事实表是否按排序顺序由这些列填充。
在那里,您可以进一步排除故障。
发布于 2017-10-19 09:53:31
关于索引在SAP中没有提供更好性能的选项的一般说法是不正确的。有明显的情况,当一个索引可以改善数据访问的数量级。
与通常的数据库性能一样,需要更多的信息,而不仅仅是“有问题”才能找到性能缓慢的原因。SAP提供了一些特定的开发工具(使用Star的分析视图和计算视图)来支持事实维模型查询。如果已经使用了这些方法,那么下一步将检查执行计划中的慢速查询。
如果这不会导致提高性能的方法,那么使用PlanViz执行跟踪将是下一个最佳选择。这允许查看查询执行的哪一部分实际需要多长时间。
这就是最高级别的陈述能带你到这里的程度。除此之外,还需要查看所提到的信息和查询。
https://stackoverflow.com/questions/45425014
复制相似问题