[SQL] Performance et Index
Fermé
11laurent11
Messages postés
31
Date d'inscription
dimanche 12 novembre 2006
Statut
Membre
Dernière intervention
9 juillet 2017
-
13 févr. 2007 à 18:13
didou - 26 févr. 2010 à 15:10
didou - 26 févr. 2010 à 15:10
A voir également:
- [SQL] Performance et Index
- Test performance pc - Guide
- Test performance pc gratuit - Guide
- Mode performance - Guide
- Index téléphonique - Guide
- Récupération serveur sql - Télécharger - Gestion de données
9 réponses
ranjok
Messages postés
311
Date d'inscription
mardi 19 février 2008
Statut
Membre
Dernière intervention
23 avril 2019
35
29 mai 2008 à 13:58
29 mai 2008 à 13:58
>Pourquoi ne pas créer une table dont la clé primaire est le numero de téléphone ?
C'est ridicule !!!
Ajoute une contrainte UNIQUE au champ qui contient les numéros de téléphone, ainsi aucune nécessité de vérifier si ça existe déja
Ou bien utiliser un INDEX sur ce champ est aussi une solution, ça prend juste plus de mémoire !!!
C'est ridicule !!!
Ajoute une contrainte UNIQUE au champ qui contient les numéros de téléphone, ainsi aucune nécessité de vérifier si ça existe déja
Ou bien utiliser un INDEX sur ce champ est aussi une solution, ça prend juste plus de mémoire !!!
blux
Messages postés
25978
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
19 avril 2024
3 287
14 févr. 2007 à 15:31
14 févr. 2007 à 15:31
Salut,
pourquoi tester s'il existe déjà ?
Tu l'insères et ton SGBD va refuser l'insertion s'il existe déjà ...à condition que le numéro de téléphone soit la clé primaire...
pourquoi tester s'il existe déjà ?
Tu l'insères et ton SGBD va refuser l'insertion s'il existe déjà ...à condition que le numéro de téléphone soit la clé primaire...
Merci pour vos réponses!
J'ai essayé la clé primaire et je trouve ça encore trop lent :(
Blux: est-ce que le fait d'utiliser une clé primaire transforme une requête insert into en update? Le problème avec ma vérification c'est que pour chaque fichier que je charge, je dois éviter d'insérer un numéro qui existe déjà mais en plus si le numéro existe déjà, je dois faire une mise à jour des autres champs liés à ce numéro dans la base de données.
J'ai essayé la clé primaire et je trouve ça encore trop lent :(
Blux: est-ce que le fait d'utiliser une clé primaire transforme une requête insert into en update? Le problème avec ma vérification c'est que pour chaque fichier que je charge, je dois éviter d'insérer un numéro qui existe déjà mais en plus si le numéro existe déjà, je dois faire une mise à jour des autres champs liés à ce numéro dans la base de données.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
blux
Messages postés
25978
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
19 avril 2024
3 287
18 févr. 2007 à 14:36
18 févr. 2007 à 14:36
Le clé primaire est sûrement le truc le plus rapide pour accéder à un enregistrement...
Si ça ne va pas assez vite pour toi, change de SGBD ou d'ordinateur...
Le fait d'utiliser une clé primaire ne fait en aucun cas de mise à jour, seul le texte de la requête le permet : INSERT ou UPDATE...
Si ça ne va pas assez vite pour toi, change de SGBD ou d'ordinateur...
Le fait d'utiliser une clé primaire ne fait en aucun cas de mise à jour, seul le texte de la requête le permet : INSERT ou UPDATE...
dja7
Messages postés
1
Date d'inscription
mercredi 11 avril 2007
Statut
Membre
Dernière intervention
11 avril 2007
11 avril 2007 à 18:19
11 avril 2007 à 18:19
Salut,
Je realise exactement le meme projet que toi, et j'ai le meme probleme : tant qu'on ne fait qu'inserer c'est rapide, mais dés qu'on rajoute autre chose dans la boucle ça devient trop lent.
As tu trouvé une solution depuis?
Et pour l'idée de Blux, comment effectuer un update si le insert echoue? Ainsi?
mysql_query("INSERT INTO table (num)
VALUES( '$num')",$connex)
or die ("UPDATE table SET nbr = nbr+1 WHERE num ='$num'");
Merci
Je realise exactement le meme projet que toi, et j'ai le meme probleme : tant qu'on ne fait qu'inserer c'est rapide, mais dés qu'on rajoute autre chose dans la boucle ça devient trop lent.
As tu trouvé une solution depuis?
Et pour l'idée de Blux, comment effectuer un update si le insert echoue? Ainsi?
mysql_query("INSERT INTO table (num)
VALUES( '$num')",$connex)
or die ("UPDATE table SET nbr = nbr+1 WHERE num ='$num'");
Merci
Bonjour,
lancez d'abord un count(*) : ( SELECT count(*) from table where num_telephone='$numero_a_verifier' )
si ça renvoie >0 , pas d'insert sinon insert
faire un count meme sur une tres grosse table est tres rapide.
lancez d'abord un count(*) : ( SELECT count(*) from table where num_telephone='$numero_a_verifier' )
si ça renvoie >0 , pas d'insert sinon insert
faire un count meme sur une tres grosse table est tres rapide.
Pourquoi ne pas séparer cela en 2 étapes ?
Dans une première boucle effectuer toutes les vérifications nécessaires, puis dans une 2eme boucle effectuer les insertions.
De cette façon on évite que les mises à jour des index dues aux insertions se fassent à chaque tour de boucle...
Je ne suis pas expert en BDD mais j'essayerais ça.
Bonne chance.
Dans une première boucle effectuer toutes les vérifications nécessaires, puis dans une 2eme boucle effectuer les insertions.
De cette façon on évite que les mises à jour des index dues aux insertions se fassent à chaque tour de boucle...
Je ne suis pas expert en BDD mais j'essayerais ça.
Bonne chance.