Table énorme.

kikoj Messages postés 15 Date d'inscription mercredi 8 octobre 2003 Statut Membre Dernière intervention 22 août 2005 - 3 août 2005 à 12:49
kikoj Messages postés 15 Date d'inscription mercredi 8 octobre 2003 Statut Membre Dernière intervention 22 août 2005 - 22 août 2005 à 12:07
Salut,

J'ai une table qui contient 2 Millions 485 Milles et 467 Lignes (SQLServer 2000). Je ne vous parle pas des performances. Un "delete from where" à partir d'une application sur cette table engendre un TimeOut. Pour qu'un SELECT avec un WHERE fonctionne dans des délais acceptable il faut que j'index tous les champs. Je sais qu'une utilisation sauvage des index n'est pas conseillée. Mais tout de même j'ai essayé d'indexer tous les champs de cette table. Ainsi j'ai amélioré les perf pour les select mais pas pour les delete. Autre probléme il me reste quelque champs à indexé mais j'ai un message d'erreur du style "Could not allocate space for object ....... in database ... because the PRIMARY File group is full". je ne sais vraiment pas quoi faire.

a+

3 réponses

cs_sim51 Messages postés 240 Date d'inscription dimanche 31 octobre 2004 Statut Membre Dernière intervention 31 décembre 2006 2
3 août 2005 à 23:28
Salut,

J'ai une question un peu bête : es tu obligé de passé par sqlserveur ?? car il existe des bdd bcp plus rapide.

Sinon je sais que dans les optins des bdd, tu peux mettre que lorsque
tu fais un delete, l'enregistrement est effacé de la bdd, mais pas
physiquement ( dès fois on le retrouve même quand on fait un sélecte )
ce qui fait que le temps d'un delete est bcp plus court. Cependant cela
oblige de faire un Vaccum de la bdd lorsqu'il y a personne (ou presque
) qui utilise la bdd ( vers 3 ou 4h du met par exemple ). Cependant je
ne suis pas un adepte de sqlserveur, donc je ne pourria pas te dire si
une telle option existe dessus.

Bonne continuation.

N'oubliez pas de cliquer sur réponse acceptée si la réponse vous convient !!!
0
inuyasha51 Messages postés 8 Date d'inscription jeudi 27 février 2003 Statut Membre Dernière intervention 22 août 2005
22 août 2005 à 09:30
2,4 millions d'enregistrements, ca le fait. Je pense que SQL Server est
capable de gerer ce genre de "grosses" tables. Ce qui m'intrigue, c'est
que vous semblez avoir collé plein d'index sans vraiment de resultats
probants. Vous dites avoir indexé tous les champs ... sans résultat ???


Votre table est-elle normalisée ? Ne pouvez-vous pas declarer une clé primaire plus performante sur quelques champs plutôt qu'une indexation globale ?

Comment avez-vous crée les index ?

Avez vous verifié le taux de fragmentation de la table ?

Pour info, en general, un Delete cible combien d'enregistrements ?
0
kikoj Messages postés 15 Date d'inscription mercredi 8 octobre 2003 Statut Membre Dernière intervention 22 août 2005
22 août 2005 à 12:07
La table est normalisée. Le probléme provient de l'existence de deux champs varchar de taille 1000. Pour les clés primaires et les indexs je crois qu'ils sont correctes.
Un delete cible en général dans les 100 lignes en moyenne. Le seul probléme avec le delete provient d'un cas ou il touche plus de 500000 lignes.
0
Rejoignez-nous