SAP HANA性能优化(4)——过滤相关优化

SELECT……WHERE

  • 尽可能早地进行过滤,这里的过滤可以是where条件限制也可以是参数,但是要避免在计算列上使用过滤器

作为查询简化的一部分,优化器将所有投影列拉升到树的顶部,应用简化措施,包括删除不必要的列,然后尽可能地向下推送过滤器,大多数情况下推送到表层。

开发模型的时候,会有许多过滤条件,也就是大家理解WHERE条件的内容,大家要尽量下沉过滤条件,能在底表过滤的都在底表过滤,减少上层运算的数据量。

另外在各种其他优化方式不生效的情况下,使用参数也是一个优化的方法。如下图,增加了开始时间和结束时间,使用的时候加上时间参数限制,不再是全部数据取出来,可以显著地提升效率。

在搜素的时候,应选择特定的字段,避免使用SELECT *

这个与HANA三大特性之一,列式存储息息相关。

列式存储,顾名思义,只需要访问必需的列,极大减少不必要的数据访问。因此我们在进行数据开发的时候,SELECT 后边的字段要非常明确,避免整表查询造成性能消耗。

从跑的结果可以看出,同样是跑同一个模型的1-10月份数据,SELECT *  和SELECT 特定字段时间上是相差很大的。

  • 避免查询中的隐式转换

即使你没有显式编写类型转换操作,系统也可以隐式地生成类型转换。例如,如果在VARCHAR值和DATE值之间进行比较,系统将生成一个将VARCHAR值转换为DATE值的隐式类型转换操作。隐式类型转换是从较低优先级类型到较高优先级类型的转换。如果经常通过查询比较两个列,则最好确保它们从一开始就具有相同的数据类型。

避免隐式类型转换的一种方法是在查询的连接部分使用显式类型转换。

例如,如果一个VARCHAR列与一个DATE值进行比较,并且你知道将DATE值转换为VARCHAR值会得到你想要的结果,建议将DATE值转换为VARCHAR值。如果VARCHAR列只包含形式为'YYYYMMDD'的日期值,则可以与从形式为'YYYYMMDD'的DATE值生成的字符串进行比较。

原始代码:

SELECT * FROM T WHERE date_string < CURRENT_DATE;

推荐代码:

SELECT * FROM T WHERE date_string < TO_VARCHAR(CURRENT_DATE, 'YYYYMMDD');

在HANA中,如果可能,请使用BINARY(<n>)或NVARCHAR(<n<)数据类型,而不是BLOB或NCLOB(即,当最大<n>5000足够大时,可以存储在列或值中的任何数据)。与BLOB或NCLOB值相比,SAP HANA数据库可以更有效地处理BINARY(<n>)或NVARCHAR(<n<)值。

  • 重排连接条件

引用条件中的某些情况(例如,"A1" - "B1" = 1)可能无法高效处理,并且可能导致在生成的查询计划中CROSS PRODUCT上方出现低效的后连接筛选操作符。

通过将条件重新排列,可以避免潜在的运行时错误,并改进查询性能。但请记住,在重新排列时要小心潜在的运行时错误,并根据实际情况进行测试和验证。

原始代码:

SELECT * FROM TA, TB WHERE a1 - b1 = 1;

推荐代码:

SELECT * FROM TA, TB WHERE a1 = b1 + 1;

原始代码:

SELECT * FROM TA, TB WHERE DAYS_BETWEEN(a1, b1) = -1;

推荐代码:
SELECT * FROM TA, TB WHERE ADD_DAYS(b1, -1) = a1;

  • 使用 exists代替in

与NOT EXISTS相比,NOT IN的处理成本要高得多。如果可能的话,建议使用NOT EXISTS代替NOT IN。

一般来说,NOT IN需要先处理整个子查询,然后在根据提供的条件匹配条目之前再处理整体查询。然而,使用NOT EXISTS时,在检查提供的条件时会返回true或false,因此除非子查询结果非常小,否则使用NOT EXISTS比使用NOT IN要快得多(EXISTS/IN也是如此)。
请注意,在转换为NOT EXISTS时,需要将子查询中的列与外部查询中的列进行正确的比较。这样,可以避免NOT EXISTS中的任何列可能为空值时引发的错误结果。

总之,如果可能的话,请尽量使用NOT EXISTS来替代NOT IN,以提高查询性能。

原始代码:

SELECT * FROM T WHERE a NOT IN (SELECT b FROM S);

推荐代码:

SELECT * FROM T WHERE NOT EXISTS (SELECT * FROM S WHERE S.b = T.a);

  • 避免分开使用exists

当一个EXISTS或NOT EXISTS通过OR连接时,它在内部被映射为左外连接。由于左外连接的处理通常比内连接性能更差,建议在可能的情况下避免使用这些分离的EXISTS条件,下边的两种方法,其中第二种方法是在嵌套查询中使用UNION ALL。如果嵌套查询结果非常小,则可以提高查询执行效率。

这里的例子是exists,in也同理。

原始代码:

SELECT * FROM T WHERE EXISTS (SELECT * FROM S WHERE S.a = T.a AND S.b = 1) OR EXISTS (SELECT * FROM S WHERE S.a = T.a AND S.b = 2);

推荐代码1:

SELECT * FROM T WHERE EXISTS (SELECT * FROM S WHERE S.a = T.a AND (S.b = 1 OR S.b = 2));

推荐代码2:

SELECT * FROM T WHERE EXISTS ((SELECT * FROM S WHERE S.a = T.a AND S.b = 1) UNION ALL (SELECT * FROM S WHERE S.a = T.a AND S.b = 2));

  • 忽略SQL优化器的显示指定

SQL优化器通常根据成本(基于成本的优化器)来确定访问路径(例如,索引搜索与表扫描)。

如果你在评估之后,发现这并不是最优的方案,可以通过在查询中显式指定提示来覆盖SQL优化器的选择,以强制执行特定的访问路径。

SELECT EXTRACT(MONTH FROM CURRENT_DATE) FROM DUMMY

WITH HINT(NO_USE_OLAP_PLAN) -- 指导优化器优先选择使用OLAP引擎。

HANA中有非常多的强制指定类型,详见官方文档:

SAP Help Portalicon-default.png?t=N7T8https://help.sap.com/docs/SAP_HANA_PLATFORM/4fe29514fd584807ac9f2a04f6754767/4ba9edce1f2347a0b9fcda99879c17a1.html?locale=en-US

  • 44
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: SAP HANA是一个基于内存的数据库管理系统,具有较高的性能。但是,如果在使用SAP HANA时出现性能问题,可能是由于以下几种原因之一: 1. 硬件资源不足:如果硬件资源(如CPU、内存和磁盘)不足,SAP HANA可能无法正常运行,导致性能问题。 2. 数据模型不合理:如果数据模型不合理,可能会导致SAP HANA查询执行效率低下,出现性能问题。 3. 查询优化不当:如果查询语句未进行优化,可能会导致SAP HANA执行效率低下,出现性能问题。 4. 过度使用视图:如果过度使用视图,可能会导致SAP HANA性能下降。 5. 无效的数据索引:如果数据索引不当或无效,可能会导致SAP HANA查询执行效率低下,出现性能问题。 要解决SAP HANA性能问题,需要进行性能调优,并确定问题的根本原因,采取相应的措施。 ### 回答2: SAP HANA是一款先进的内存数据库管理系统,可以提供快速的数据处理和分析能力。然而,在使用SAP HANA时,可能会遇到一些性能问题,如下所述。 首先,硬件配置可能是影响SAP HANA性能的关键因素之一。SAP HANA需要足够的内存和处理能力来支持大规模数据的处理和分析。如果硬件配置不足,可能会导致性能下降。因此,我们应该根据实际需求合理配置硬件资源,包括内存、处理器和存储设备。 其次,数据模型设计也可能对性能产生影响。良好的数据模型设计可以提高数据访问和查询效率。优化数据模型的方法包括合理的表结构设计、索引的创建和使用、数据冗余的减少等。因此,在使用SAP HANA时,我们应该对数据模型进行细致的分析和设计,以充分利用其强大的性能优势。 此外,查询性能也是SAP HANA性能问题的重要方面。合理地编写和优化查询可以减少响应时间和资源消耗。在编写查询时,我们应该避免复杂的连接操作、过度使用子查询和函数,以及避免使用不必要的列。此外,我们还可以通过创建适当的索引和分区来提高查询性能。 最后,应用服务器和网络性能也可能对SAP HANA性能产生影响。如果应用服务器或网络故障或延时,可能会导致数据访问和传输速度变慢。因此,我们应该确保应用服务器和网络的稳定性和高效性。 综上所述,SAP HANA性能问题可能涉及硬件配置、数据模型设计、查询性能、应用服务器和网络性能等多个方面。通过合理配置硬件资源、优化数据模型、编写和优化查询、确保应用服务器和网络的稳定性,我们可以提高SAP HANA性能优化用户体验。 ### 回答3: SAP HANA是一种内存计算数据库,具有高速处理能力和实时分析功能。然而,由于数据量增加和复杂业务需求的增加,可能会出现一些性能问题。 首先,内存不足是SAP HANA性能问题的主要原因之一。当数据库中的数据超出内存容量时,系统会将一部分数据存储在硬盘上,从而降低了查询和数据处理的速度。因此,为了解决这个问题,可以考虑增加内存容量或优化数据库设计和数据管理,以减小数据库的大小。 其次,查询优化也是提高性能的重要因素。一些查询可能会使用复杂的算法和操作,导致执行时间较长。为了解决这个问题,可以通过分析查询执行计划和使用合适的索引等方法来优化查询。同时,合理使用缓存和预加载数据,也可以提高查询性能。 此外,网络延迟和带宽限制也可能导致性能问题。特别是在分布式环境中,分布在不同地理位置的数据库之间的数据传输可能会受到网络问题的影响。为了解决这个问题,可以考虑优化网络设置,增加带宽,或者将数据库分布在靠近用户的位置。 最后,定期维护和监控也是解决SAP HANA性能问题的重要手段。通过定期进行数据库清理和压缩,可以减小数据库的大小,优化查询性能。同时,通过监控系统,及时发现并解决潜在的性能问题,也是提高系统性能的有效方法。 综上所述,SAP HANA性能问题往往涉及内存不足、查询优化、网络延迟和带宽限制等方面。通过增加内存容量、优化查询、优化网络设置,并进行定期维护和监控,可以有效解决这些问题,提高系统的性能

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值