Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Ottimizzazione Query
lunedì 06 giugno 2011 - 11.14
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
SQL Server 2005
elsinore
Profilo
| Junior Member
191
messaggi | Data Invio:
lun 6 giu 2011 - 11:14
Ciao a tutti,
io ho una query che fa delle select annidate....su una vista che ha circa 1500 righe....la query mi ritorna 3 righe....ma il mio problema grosso è che
1. ci mette circa 15 minuti!
2. la cpu mi va al 100%!
la query è questa:
DECLARE @CODE_PREFIX_CA as VARCHAR(255)
DECLARE @CODE_PREFIX_CNV as VARCHAR(255)
DECLARE @CODE_PREFIX_SERSTA as VARCHAR(255)
DECLARE @CODE_PREFIX_MA as varchar(255)
----
DECLARE @data_ora_da as VARCHAR(255)
DECLARE @data_ora_a as VARCHAR(255)
--
DECLARE @CODE_PREFIX as VARCHAR(255)
set @CODE_PREFIX = 'H/CL/DI'
if @CODE_PREFIX = 'H/CL/DI'
begin
set @CODE_PREFIX_CA = 'H/CL/DI/CA/%'
set @CODE_PREFIX_CNV = 'H/CL/DI/CNV/%'
set @CODE_PREFIX_SERSTA = 'H/CL/DI/SERSTA/%'
set @CODE_PREFIX_MA = 'H/CL/DI/MA'
end
else
begin
set @CODE_PREFIX_CA = 'H/CL/PO/CA/%'
set @CODE_PREFIX_CNV = 'H/CL/PO/CNV/%'
set @CODE_PREFIX_SERSTA = 'H/CL/PO/SERSTA/%'
set @CODE_PREFIX_MA = 'H/CL/PO/MA'
end
--
set @data_ora_da = '05/04/2011 01:00:00.000'
set @data_ora_a = '05/12/2011 23:59:00.000'
--
select *, ISNULL(TOT_MI, 0) + ISNULL(TOT_ME, 0)
from
( select distinct qi.user_code as cdc, qi.code_prefix as sede_tecnica, qi.code,
(select sum(real_con_length)
from
export_ore
where (code_prefix = qi.code_prefix or code_prefix like qi.code_prefix + '/%') and commessa is null
and (competenza = 'E' or competenza = 'G') and tipo_op = 'interno'
) as MI_ELET,
(select sum(real_con_length)
from export_ore
where (code_prefix = qi.code_prefix or code_prefix like qi.code_prefix + '/%') and commessa is null
and competenza = 'M' and tipo_op = 'interno'
) as MI_MEC,
(select sum(real_con_length)
from export_ore
where (code_prefix = qi.code_prefix or code_prefix like qi.code_prefix + '/%') and commessa is null
and tipo_op = 'interno'
) as TOT_MI,
(select sum(real_con_length)
from export_ore
where (code_prefix = qi.code_prefix or code_prefix like qi.code_prefix + '/%') and commessa is null
and tipo_op = 'esterno'
) as TOT_ME
FROM
(select user_code, code_prefix, code, real_con_length, DATA_AVANZAMENTO,
[description], tipo_op, commessa, competenza
from export_ore where (code_prefix like @CODE_PREFIX_CA or code_prefix like @CODE_PREFIX_CNV
or code_prefix like @CODE_PREFIX_SERSTA or code_prefix = @CODE_PREFIX_MA)
OR description like 'cdc%'
and commessa is null
) qi
) qe
where qe.tot_mi is not null or qe.tot_me is not null
order by qe.sede_tecnica
c'è un modo per ottimizzare sia i tempi di esecuzione che l'impiego della cpu???
grazie
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
lun 13 giu 2011 - 11:47
>Ciao a tutti,
Ciao
>io ho una query che fa delle select annidate....su una vista
>che ha circa 1500 righe....la query mi ritorna 3 righe....ma
>il mio problema grosso è che
>1. ci mette circa 15 minuti!
>2. la cpu mi va al 100%!
>c'è un modo per ottimizzare sia i tempi di esecuzione che l'impiego della cpu???
la query che scrivi è veramente pesante. E per di più molte operazioni le fai row by row.
Al di là dell'ottimizzazione della scrittura, per cui è necessaria la vista, i dati e tutto quanto serva per provarla (posta o allega pure l'ambiente se vuoi), di indici ce ne sono?
>grazie
di nulla!
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT
http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !