对包含字符串的数据库表进行SELECT花费太多时间(Oracle)

2020-08-21 00:28发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好!

我创建了一个数据库表,其中包含两个CHAR2类型的索引字段(key1,key2)和一个STRING类型的值字段。

该表包含3700个条目。 值字段仅包含短字符串(最多30个)。

SELECT语句大约需要3秒钟...

仅选择关键字段非常快,但字符串字段需要3秒。

我进行了SQL跟踪,但是只有SELECT语句运行时间如此长。

我知道在数据库中存储和选择STRINGS并不是最好的方法,但是我看不出为什么要花那么多时间。

这是来自性能跟踪SAT:

您对我有什么提示吗?

预先感谢

Enno

(56.6 kB)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好!

我创建了一个数据库表,其中包含两个CHAR2类型的索引字段(key1,key2)和一个STRING类型的值字段。

该表包含3700个条目。 值字段仅包含短字符串(最多30个)。

SELECT语句大约需要3秒钟...

仅选择关键字段非常快,但字符串字段需要3秒。

我进行了SQL跟踪,但是只有SELECT语句运行时间如此长。

我知道在数据库中存储和选择STRINGS并不是最好的方法,但是我看不出为什么要花那么多时间。

这是来自性能跟踪SAT:

您对我有什么提示吗?

预先感谢

Enno

(56.6 kB)
付费偷看设置
发送
12条回答
绿领巾童鞋
1楼-- · 2020-08-21 00:36

您好,
我昨天刚刚解决了这个问题:-)
我们从Z * DB表中进行了(标准的abap/open sql)SELECT,其中一列定义为STRING(Oracle中的CLOB) )。 简单的SELECT * FROM ztable约40k条记录花费了大约60秒钟!

我正在研究可能是什么问题,并将其固定在STRING列上。 如果我运行相同的SELECT却没有选择STRING列-花了大约1秒钟(40k条记录,没有一个字符串列)。

找不到其他解决方案。 但是我在ABAP中使用" EXEC SQL"尝试了Oracle的"本机SQL",选择相同数量的数据现在仅花费了约10秒(在DO。ENDDO。循环中进行FETCH,不同的方法甚至可能更快?请发表评论)。 因此,我最终使用了这种"解决方法",因为它是代码中我们需要尽可能多的性能的部分。 但! 请阅读下文!!!!

如果您将此解决方案与本机SQL结合使用-那么我强烈建议您对所获取的数据进行详细的测试和比较(OPEN SQL与本机SQL SELECTs)。 就我而言,数据几乎完全相同。 不同之处在于,本机SQL select的字符串数据缺少所有'EN SPACE'(U + 2002)尾随字符! (对于我们的实现没有问题)

请发表评论或分享其他想法...

Haoba3210
2楼-- · 2020-08-21 00:39

其他信息:

该字段为 类型为STRINGVAL的数据类型为" STRING-字符串(CLOB)"

Oracle版本为12.1.0.2.0

大道至简
3楼-- · 2020-08-21 00:42

这是一个答案测试。

或测试答案。

从移动设备

半个程序猿
4楼-- · 2020-08-21 00:30

似乎每个条目都将通过SELECT * ... INTO TABLE提取:

< p>

与T005T相同的选择(我将其用作测试表的模板)看起来"效率更高":

我没有找到有关" DB:Exec Static"的任何解释...

Tomas Buryanek

小c菟菟
5楼-- · 2020-08-21 00:43

嗨,Enno,

如果在Oracle方面将字符串实现为CLOB甚至BLOB,则可以解释一些延迟。 我不明白这么大的延迟。

但是[BC] LOB的普遍问题是,您需要在OCI界面中采取额外的步骤来检索数据。尽管我从Oracle 10开始就没有使用Oracle OCI进行编程,所以我的知识已经过时了。 无论如何,当您从数据库中检索一行时,字符串只是存在,但对于CLOB,您需要为每个选定行和"字符串"字段打开一个流,以检索该数据。 我想这就是SAP数据库驱动程序在后台执行的操作。

但是我看到这是一个有趣的问题。 尤其是与HANA行为进行比较时,我很快就会自己看看。

干杯,
Peter

huskylover
6楼-- · 2020-08-21 00:42

Enno Wulff T005T表没有 STRING列。 我尝试在SELECT * FROM Ztable(带有STRING列)上运行SAT,但在我们的系统上看不到" DB:Exec Static" ...

一周热门 更多>