我想在 select 语句的 where 子句中比较两个类型为 char 的变量。数据库表的变量长度为40,比较变量为32。在where条件下是否可以只比较数据库变量的前32个字符?如果是,我该怎么做?如果不可能,我的替代方案是什么?该数据库有超过 300.000 个条目,所以我不能将它们全部循环到一个内部表中。
1 回答
欢迎,小程序员。首先我想说,并指出这些(如果您不感兴趣,请向下滚动到我推荐的答案):
该数据库有超过 300.000 个条目。你肯定是说,数据表,你想从中选择,对吧?整个数据库的 300.000 个条目是花生。
我假设表中有 300.000 个条目。你不能循环?你当然可以。这些时代结束了,伙计,300.000 是当今不断增长的标准。你知道,为什么云、大数据、hana、内存数据存储等会发展吗?
但是在这种情况下(我知道,循环更多数据并不是很好,那么这是必要的)在全表扫描后有一些步骤可以缩小数据。让我们先处理这个词。
1. 避免全表扫描。只要有可能。
您总是需要查看,以获得一些 where 参数来正确定义您的条件。大多数情况下,有一些值可用作 where 条件。还要检查现有索引的可用性。
2.省略选择* from into对应。
有时两次选择可能比一次大更好,尤其是当数据变得越来越大时。对于这种情况,为内部表创建一个类型是有用的,它只保存记录的键,这些键不是由键/外键选择的。此外,您可以将 where-clause-params 添加为字段,或者在您的情况下,这些字符字段(在一般字段中,将用于缩小结果范围)。然后只选择那些需要的字段到内部表中。
3.使用所有DB-Functions,你可以使用
这传递了 RDBMS 可以做的所有工作,而不是稍后必须在 AS 上运行。聚合,没有重复,总和等......
4. 你知道你的数据库吗?然后使用它的提示
与第 4 点类似,这会将执行传递给 rdbms,resp。运行优化 rdbms 的数据库计算机,它可能会做得更好。这应该非常谨慎地使用。
5. 你知道结果的大小吗?选择合适的内表
三件事结合在一起:内部表的类型、结果的数量、用作“读取表/循环”条件的可用值。
哈希表?最快的。它们消耗大量内存。特别是对于大型结构。但是你可以定义,你想如何创建它们。具有许多记录的小型结构化内部表可以更快,并且消耗
更少的内存,然后是具有更少记录的大结构。这应该在高流量高峰时间做出决定之前通过跟踪进行验证。排序表?最好,如果你有一个数字键和一个小结构。这主要是散列后最快的组合。
标准表?你现在可以为自己解释这个。
钥匙?如有必要,请组合使用,但尝试使用一个主键。
这些是性能方面的一些关键提示。
曾经,您处于您拥有您的情况(可能结果太大),尤其是在您的情况下,您可以删除字符串不包含 where 子句模式的内部表。这是一个宏,对于类似的事情,循环会做,但我认为它更快。“CP”是包含模式,“NP”是不包含模式。这可能会缩小结果。
答案是替代品清单?不!
我为什么要写这个,并将其作为答案发布?在这种情况下,没有答案,这至少是用作替代方案的最近点。
在我们的 SAP 环境中,我们有这个答案:
http://scn.sap.com/thread/1786222
结论:
创建一个范围表,使用“CP”作为选项,使用“I”作为符号。将 where-condition-value 传递给 low。使用 where "in blabla" 执行选择