我编写了一个执行大约40个查询的应用程序,然后对每个查询的结果进行一些处理。 (现在我在带有SQL Server 2005的Windows XP上的Visual C ++ 6.0中使用Qt 3.2.2,但这不是必需的。)范例是用查询创建一个QSqlQuery
对象(这会导致查询到然后while (query.next()) { operate(query.value(0)); }
通过分析我发现query.next()
调用占用了程序的一半时间,这似乎过多,因为它只是取一行数据(6或7个字段)。
这种表现是不可接受的,我正在寻找一种改进方法。我愿意改变任何事情 - 切换我的编译器,切换语言,切换我用来从数据库中获取数据的范例。我怎样才能加快速度呢?
以下是查询:
select rtrim(Portfolio.securityid), rtrim(type), rtrim(coordinate), rtrim(value)
from MarketData
inner join portfolio
on cast(MarketData.securityid as varchar(36))=portfolio.securityid
where Portfolioname=?
and type in
('bond_profit', 'bondoption_profit', 'equity_profit', 'equityoption_profit')
and marketdate=?
order by Portfolio.securityid, type, coordinate
程序运行时CPU使用率约为40%,因此我怀疑它花费大部分时间等待.next()调用返回更多数据。
在SSMS中执行相同的查询会在大约5分钟内返回450万行,但在程序运行期间等待.next()所花费的总时间为30分钟。