fdouieb
Messages postés264Date d'inscriptionvendredi 12 décembre 2003StatutMembreDernière intervention12 juin 2013
-
11 oct. 2010 à 14:41
cs_gogniol
Messages postés7Date d'inscriptionmardi 21 septembre 2010StatutMembreDernière intervention 7 mai 2011
-
12 oct. 2010 à 11:44
Bonjour
J'utilise ASE version 15
Je possède une table avec 100 millions de ligne
create table myTable(
col1_id int not null,
col2_id int not null,
col3_id int not null,
date datetime not null,
value varchar(64) not null)
create unique nonclustered index myIndex_pk on myTable ( col1_id ASC,col2_id ASC, col3_id ASC, date ASC)
create index date_i on myTable (date ASC)
insert into #hss_23 (col1_id, date_value, avg_value)
select col1_id, max(date), avg(convert(float, value))
from myTable
where col1_id in (select col1_id from #all_data)
and col2_id = 1
and col3_id = 23
and datepart(year, date) = @year
and convert(float, value) <> 0
group by col1_id
la table temporaire possède 1615 ligne
L'insert s'effectue en 2h30 c'est affreux. Est ce qu'il y a une possibilité de réduire considérablement ce temps
cs_gogniol
Messages postés7Date d'inscriptionmardi 21 septembre 2010StatutMembreDernière intervention 7 mai 20111 12 oct. 2010 à 11:44
Bonjour,
Juste une petite question : quand est ce que ton index a été créé ? avant ou aprés l'insertion des 100 millions de ligne ?
Peut être que les statistiques de l'index ne sont pas à jour.
Essaie de faire un
update index statistics myTable
Peut êre que cela va changer ton temp de réponse.
Tu peux tenter aussi de faire un JOIN plutot qu'un IN.
Ta requete devient :
insert into #hss_23 (col1_id, date_value, avg_value)
select A.col1_id, max(date), avg(convert(float, value))
from myTable A
inner join #all_data B on B.col1_id=A.col1_id
where col2_id = 1
and col3_id = 23
and datepart(year, date) = @year
and convert(float, value) <> 0
group by A.col1_id
Mais la je ne suis vraiement pas sur que cela va changer quelque chose.