该项目是一个ASP/VB.net的Web应用程序。问题在于一些页面非常慢。在尝试找到瓶颈后,发现当用查询结果填充datatable时,load方法是问题所在。
我们使用Oracle数据库,并且查询是在存储过程中执行的。例如,我们有一个相对简单的select语句在一个过程中返回2列6行,确定执行时间约为0.015秒。然而,将OracleDataReader加载到datatable中平均需要7秒钟 - 对于这样一个小的记录集来说,这是一个荒谬的时间。经过对查询进行调整,我发现一个简单的decode语句似乎是引起问题的原因。decode语句的使用方式如下:
WHERE DECODE(iBln, 1, column1, column2) BETWEEN iDate1 and iDate2
iBln变量只是传递一个数字作为布尔变量,以确定哪个列应该在两个日期之间。如果我注释掉这个decode语句,并使它变成"column1 BETWEEN iDate1 and iDate2",那么load方法就不需要任何时间,这表明确实是decode语句引起了问题。
所以我只是希望能听到任何人对导致这个问题的原因或如何解决它有什么想法。这是一个简单的decode,它怎么会影响load方法呢?
我们使用Oracle数据库,并且查询是在存储过程中执行的。例如,我们有一个相对简单的select语句在一个过程中返回2列6行,确定执行时间约为0.015秒。然而,将OracleDataReader加载到datatable中平均需要7秒钟 - 对于这样一个小的记录集来说,这是一个荒谬的时间。经过对查询进行调整,我发现一个简单的decode语句似乎是引起问题的原因。decode语句的使用方式如下:
WHERE DECODE(iBln, 1, column1, column2) BETWEEN iDate1 and iDate2
iBln变量只是传递一个数字作为布尔变量,以确定哪个列应该在两个日期之间。如果我注释掉这个decode语句,并使它变成"column1 BETWEEN iDate1 and iDate2",那么load方法就不需要任何时间,这表明确实是decode语句引起了问题。
所以我只是希望能听到任何人对导致这个问题的原因或如何解决它有什么想法。这是一个简单的decode,它怎么会影响load方法呢?
iBin
硬编码了一个值?如果是这样,那么解析器可能已将DECODE表达式解析为单个列名,并因此使用索引访问路径。 - Dave Costa