Otimizaçao de consulta em ADO
Estou cm um problema, pois tenho que fazer uma consulta num componente ADOQuery, porem esta mto lento! Gostaria de saber quais configuracaoes poderia fazer no componente pra melhorar a perfomance da consulta.
Obrigado!
Obrigado!
Curynga
Curtidas 0
Respostas
Bon Jovi
12/07/2006
Depende. Quer fazer o que? Vai usar data controls ou apenas fazer loop?
Se quer apenas percorrer os registros de forma unidirecional, use o tipo de cursor ctOpenForwardOnly (necessario Location = clServer). Ex.:
Qdo se usa CursorLocation Server é recomendável sempre fechar assim que terminado o uso interno, sem deixar aberto pro usuário.
Se quer apenas percorrer os registros de forma unidirecional, use o tipo de cursor ctOpenForwardOnly (necessario Location = clServer). Ex.:
ADODataSet1.Close; ADODataSet1.CursorLocation := clUseServer; ADODataSet1.CursorType := ctOpenForwardOnly; ADODataSet1.LockType := ltReadOnly; ADODataSet1.ParamCheck := False; //só no caso de nao ter parametros ADODataSet1.DisableControls; ADODataSet1.CommandText := ´select CategoryID, CategoryName from Categories´; ADODataSet1.Open; try while not ADODataSet1.Eof do begin ListBox1.Items.Add(ADODataSet1CategoryID.AsString); ADODataSet1.Next; end; finally ADODataSet1.Close; end;
Qdo se usa CursorLocation Server é recomendável sempre fechar assim que terminado o uso interno, sem deixar aberto pro usuário.
GOSTEI 0
Bon Jovi
12/07/2006
E tb poste a consulta.
GOSTEI 0
Curynga
12/07/2006
SELECT ld.cod_ban, ld.cod_age, ld.num_cdj, ld.num_dep, ld.dat_lan,
SUM(ld.vr_lan) as Rendimento
FROM CDJ_DEPOSITO d
JOIN CDJ_LANCAMENTO_DEPOSITO ld ON
(ld.cod_ban = d.cod_ban
AND ld.cod_age = d.cod_age
AND ld.num_cdj = d.num_cdj
AND ld.num_dep = d.num_dep)
WHERE d.cod_ban_ori = FloatToSQL(pCodBan)
AND d.cod_age_ori = FloatToSQL(pCodAge)
AND d.num_cdj_ori = FloatToSQL(pNumCdj)
AND d.num_dep_ori = FloatToSQL(pNumDep)
AND ld.cod_his_lan_dj IN (4,5)
AND ld.dat_lan = DateToSQL(pDatLan)
GROUP BY ld.cod_ban, ld.cod_age, ld.num_cdj, ld.num_dep, ld.dat_lan
A consulta é essa que estou fazendo, e estou passando os parametros daquela forma para evitar o proprio parametro do componente.
Não vi alteraçoes que poderiam ser feitas e já alterei juntamente com o DBA alguns indices.
SUM(ld.vr_lan) as Rendimento
FROM CDJ_DEPOSITO d
JOIN CDJ_LANCAMENTO_DEPOSITO ld ON
(ld.cod_ban = d.cod_ban
AND ld.cod_age = d.cod_age
AND ld.num_cdj = d.num_cdj
AND ld.num_dep = d.num_dep)
WHERE d.cod_ban_ori = FloatToSQL(pCodBan)
AND d.cod_age_ori = FloatToSQL(pCodAge)
AND d.num_cdj_ori = FloatToSQL(pNumCdj)
AND d.num_dep_ori = FloatToSQL(pNumDep)
AND ld.cod_his_lan_dj IN (4,5)
AND ld.dat_lan = DateToSQL(pDatLan)
GROUP BY ld.cod_ban, ld.cod_age, ld.num_cdj, ld.num_dep, ld.dat_lan
A consulta é essa que estou fazendo, e estou passando os parametros daquela forma para evitar o proprio parametro do componente.
Não vi alteraçoes que poderiam ser feitas e já alterei juntamente com o DBA alguns indices.
GOSTEI 0