Я написал приложение, которое выполняет около 40 запросов, а затем выполняет некоторую обработку результатов каждого запроса.(Сейчас я использую Qt 3.2.2 в Visual C ++ 6.0 в Windows XP с SQL Server 2005, но это не обязательно.) Парадигма заключается в создании объекта 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 возвращает 4,5 миллиона строк примерно за 5 минут, но общее время, затраченное на ожидание .next () во время выполнения программы30 минут.