У меня есть такой запрос
select Count(1) as Count, pt.Name as TypeName, pt.ID as TypeID, pc.ID as CatID,
o.Name as OffName, o.ID as OffID, pc.Color as Color, s.ID, s.ActionType,
s.EndTime, pt.Size, pt.Price, pt.Unit, pt.OffID as ProdOffID
from sess s
inner join off o on o.id = s.offid
inner join act a on a.sessid = s.id
inner join prod p on p.tagid = a.prodid
inner join ProdType pt on pt.id = p.prodtypeid and pt.offid = p.Offid
left join prodcat pc on pc.id = pt.prodcatid and pc.offid = pt.offid
where s.offid = ? and s.acttype in (?, ?)
Group By pt.Name, pt.ID, pc.ID, o.Name,
o.ID, pc.Color, s.ID, s.ActType,
s.EndTime, pt.Size, pt.Price, pt.Unit, pt.OffID
Если я использую bindValue для параметров, приведенный ниже блок кода занимает много времени (около 2 секунд)
QSqlQuery newQuery(db);
newQuery.prepare(queryString);
for (int parameterIndex=0;parameterIndex<values.count();parameterIndex++) {
newQuery.bindValue(parameterIndex,values[parameterIndex]);
}
newQuery.exec();
Но если я заменю?
со значениями, и если я не использую код bindValue, приведенный ниже блок занимает около 50 мс.
QSqlQuery newQuery(db);
newQuery.prepare(queryString);
newQuery.exec();
Это нормально?Что делает эту разницу?
Обратите внимание, что эти таблицы имеют индексы btree для своих FK.Используя Qt 4.7.4, скомпилированный с VC2008SP1.База данных PostgreSQL.