Улучшение производительности SQL следующей строки - PullRequest
0 голосов
/ 20 декабря 2011

Я написал приложение, которое выполняет около 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 минут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...