打开不同长度的Chars之间的SQL WHERE Con​​diition

时间:2015-12-04 10:27:59

标签: sap abap opensql

我想比较一个select语句的where子句,两个变量类型为char。数据库表的变量长度为40,比较变量为32.是否可以在where条件下仅比较数据库变量的前32个字符?什么时候我可以做到这一点?如果不可能,我的替代方案是什么?该数据库有超过300.000个条目,因此我无法将它们全部循环到内部表中。

1 个答案:

答案 0 :(得分:3)

欢迎,小程序员。 首先我想说,并指出这些(如果你不感兴趣,请向下滚动到我建议的答案):

该数据库有超过300.000个条目。 你的意思是,数据表,你想要选择,对吧? 整个数据库的300.000个条目是花生。

我假设表中有300.000个条目。你不能循环?你当然可以。 这些时间结束了,老兄,今天300.000一直是不断增长的标准。 你知道吗,为什么云,大数据,hana,内存数据存储等都在发展?

但是在这种情况下(并且我理解,循环更多数据并不是很好),这是必要的)有一些步骤可以在全表扫描后缩小数据。 让我们先处理这个词。

<强> 1。避免全表扫描。无论如何。

你总是要看,以获得一些where参数    正确定义您的条件。主要有一些价值观    用作条件。检查现有索引的可用性。

<强> 2。 OMIT SELECTING * from from。

有时两个选择可能比一个更好,特别是当时    数据越来越大。对于这种情况,创建一个类型很有用    对于内部表,它只保存记录的键,其中    不是通过键/外键选择的。另外你可以添加    where-clause-params as fields,或者在你的例子中,这些字符字段(in    一般字段,将用于缩小结果范围)。    然后在内部表中只选择那些所需的字段。

第3。使用所有数据库功能,您可以使用

这传递了RDBMS可以做的所有工作,而不是之后的工作   必须在AS上运行。聚合,没有重复,总和等......

<强> 4。你知道你的数据库吗?然后使用它的提示

与第4点类似,这会将执行传递给rdbms,resp。该    数据库计算机,其中运行优化的rdbms,这可能是可以做到的    事情更好。这应该非常谨慎使用。

<强> 5。你知道结果的大小吗?选择正确的内部表格

三件事汇集在一起​​:内部表的类型,结果的数量, 可用值作为&#34; read-table / loop at&#34;

的条件
  • 哈希表?最快的。他们消耗大量内存。特别 适用于大型结构。但您可以定义,如何创建它们。 一个包含许多记录的小型结构化内部表可以更快,并消耗
    内存减少,然后是记录较少的大结构。这应该得到验证 在决定之前跟踪,在高流量高峰时间。

  • 排序表?最好,如果你有一个数字键和一个小结构。 这是散列后最快的组合。

  • 标准表?你现在想要为自己解释这个。

  • 钥匙?如有必要,请合并,但尝试使用一个主键。

这些是性能方面的一些重要提示。

曾经,你处于这种情况,你有你的(可能是太大的结果),特别是在你的情况下,你可以删除字符串不包含where子句模式的内部表。 这是一个宏,对于类似的事情,循环会做,但我认为,它更快。 &#34; CP&#34;是包含模式,&#34; NP&#34;是为了不包含模式。 这可能会缩小结果。

答案是一系列备选方案?不!

为什么我要写这个,并将其作为答案发布?在这种情况下,没有答案,这至少是最接近被用作替代的点。

在我们的SAP环境中,我们有这样的答案:

http://scn.sap.com/thread/1786222

<强>结论:

创建范围表,使用&#34; CP&#34;作为选项和&#34;我&#34;分配。 将where-condition-value传递给low。 用blabla&#34;

中的&#34;执行选择