Index

Résolu
fdouieb Messages postés 264 Date d'inscription vendredi 12 décembre 2003 Statut Membre Dernière intervention 12 juin 2013 - 11 oct. 2010 à 14:41
cs_gogniol Messages postés 7 Date d'inscription mardi 21 septembre 2010 Statut Membre Derniè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

Merci

1 réponse

cs_gogniol Messages postés 7 Date d'inscription mardi 21 septembre 2010 Statut Membre Dernière intervention 7 mai 2011 1
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.

Cordialement
3
Rejoignez-nous