Flux rss
Collection CommentCaMarche.net
Rechercher : dans
Par : Mots clés Nom d'utilisateur
Messages sans réponse

[SQL] Performance et Index

11laurent11, le mardi 13 février 2007 à 18:13:37 
 Signaler ce message aux modérateurs

Bonjour,

J'ai une base de données qui contient pour l'instant environ 150 000 entrées qui sont en fait des numéros de téléphone avec un certain nombres de champs liés à ces numéros de téléphone.

numero_telephone | champ1 | champ2 | ... => Tous en VARCHAR

Quand je veux alimenter la base de données avec des nouveaux numéros (variable $numero_a_verifier) de téléphone, je dois bien sûr vérifier que ces numéros n'existent pas déjà et c'est là que les problèmes commencent...

Je fais donc un SELECT num_telephone where num_telephone=$numero_a_verifier

Ca fonctionne mais c'est terriblement lent et comme j'alimente la base avec des paquets de plus de 100 000 numéros, SQL doit aller vérifier les 150 000 existants et ça prend un temps dingue (plusieurs heures!)

Je pense donc que j'ai mal formatté ma base. Je dois probablement indexer la base, j'ai simplement cliqué sur l'icone index de la colonne numero_telephone mais c'est à peine un peu plus rapide.

Est-ce que quelqu'un peut m'expliquer comment je peux optimiser ce genre de requêtes ?

Merci !
Laurent

Configuration: Windows XP
Internet Explorer 6.0

1

sapatera, le mercredi 14 février 2007 à 13:58:19
  • +1

Bonjour,

Pourquoi ne pas créer une table dont la clé primaire est le numero de téléphone ?

Répondre à sapatera

2

blux, le mercredi 14 février 2007 à 15:31:11
  • +1

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...
A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

3

Laurent, le mercredi 14 février 2007 à 18:16:36

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.

Répondre à Laurent

4

blux, le dimanche 18 février 2007 à 14:36:52
  • +1

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...
A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

5

dja7, le mercredi 11 avril 2007 à 18:19:49
  • +1

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

Répondre à dja7

6

xo, le dimanche 21 octobre 2007 à 00:18:32

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.

Répondre à xo

7

Thibaut, le jeudi 20 mars 2008 à 17:55:46

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.

Répondre à Thibaut

8

 ranjok, le jeudi 29 mai 2008 à 13:58:14
  • +1

>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 !!!

Répondre à ranjok
SQL - Création d'index Qu'est-ce qu'un index? Un index est un objet complémentaire (mais non indispensable) à la base de données permettant d'"indexer" certaines colonnes dans le but d'améliorer l'accès aux données par le SGBDR, au même titre qu'un index dans un livre ne... www.commentcamarche.net/contents/sql/sqlindex.php3
PL/SQL : le type table Salut tout le monde ! Est ce que qqn pourrait me dire s'il est possible de créer un type table PL/SQL (pas la table d'une base) de plusieurs types ? J'ai essayé et ça ne marche pas... : TYPE truc IS TABLE OF (NUMBER,CHAR) INDEX BY BINARY_INTEGER; Il... www.commentcamarche.net/forum/affich-239532-pl-sql-le-type-table
Télécharger SQL Server Performance Monitor SQL Server Performance Monitor permet de surveiller les performances de SQL Server à partir d'une seule interface au sein d'une entreprise. Il propose une analyse graphique en temps réel et une historique de l'exécution de code SQL dans les... www.commentcamarche.net/telecharger/telecharger-34058386-sql-server-performance-monitor
Equivalent de InDesign/XPress/Publisher (gratuit)Microsoft Office Publisher, Quark XPress ou Adobe InDesign sont des programmes de publication assistée par ordinateur (PAO) permettant de concevoir et de créer des documents et supports de communication (plaquettes, brochures, etc.). Ils peuvent être... www.commentcamarche.net/faq/sujet-6052-equivalent-de-indesign-xpress-publisher-gratuit
[PHP] Notice: Undefined index:Si vous utilisez les tableaux $_POST ou $_GET pour récupérer les variables de vos formulaires ou autres, il se peut que vous tombiez sur cette erreur: Notice: Undefined index 'champs du tableau' in 'chemin du fichier php en cours d'execution' on line... www.commentcamarche.net/faq/sujet-1391-php-notice-undefined-index
Visual FoxPro et SQL-ServerVisual Foxpro 9 et SQL-Server 2005 Quoi de mieux que Visual FoxPro pour bien utiliser SQL-Server ? Voici une question intéressante ! Pour plus d'information voir l'article de Joël Post http://www.cyberfoxpro.com/joel et les fichiers... www.commentcamarche.net/faq/sujet-5347-visual-foxpro-et-sql-server
Oracle: recup des sql grâce aux import/exportHello toute la communauté, Voici, j'ai un base de donnée Oracle 7, et j'ai aucun script sql de creation (des tables, index, ...). J'ai cru attendre parler que l'on pouvait récupérer l'ensemble des sql de création en faisant un import ou un export... www.commentcamarche.net/forum/affich-367214-oracle-recup-des-sql-grace-aux-import-export
Utilisation des index sous sql serverBonjour, quelqu'un pourrai m'expliquer comment se servir d'un index sous sql server 2008, Voila ou j'en suis. je travaille sous sql server 2008 dans l'outil report server. J'utilise comme source de donnée Oracle, j'ai terminer mes vues des sources de... www.commentcamarche.net/forum/affich-11870325-utilisation-des-index-sous-sql-server
[shell] appel variable dans commande sql (Résolu)Bonjour, Je stocke dans une variable shell le resultat d'une commande SQL. J'essaye de faire la chose suivante: [code] test=212 variable=`sqlplus -s login/mdp www.commentcamarche.net/forum/affich-3331472-shell-appel-variable-dans-commande-sql
Télécharger SQL Script BuilderSQL Script Builder est un programme qui permet de concevoir un script SQL au format MySql, MS SQL, Oracle, Pervasive ou PostgreSQL à partir d’une base de données. Ce script va déplacer toute ou partie des tables de la base de données concernée vers la... www.commentcamarche.net/telecharger/telecharger-34059733-sql-script-builder
Télécharger Moniteur SQL Interbase/FirebirdMoniteur SQL Interbase/Firebird est un moniteur qui permet de mieux gérer vos base de données et d’effectuer un suivi sur le comportement SQL de vos programmes. Par l’implémentation de cet outil vous pouvez rafraîchir vos données et procéder à la... www.commentcamarche.net/telecharger/telecharger-34058396-moniteur-sql-interbase-firebird
Télécharger Index.dat AnalyzerIndex.dat Analyzer permet de voir, éditer et effacer le contenu de ces fichiers - théoriquement cachés - qui participent aux fonctions de cache d'Internet explorer, et stockent un certain nombre de vos traces sur internet (URLs notamment), mais aussi... www.commentcamarche.net/telecharger/telecharger-34055298-index-dat-analyzer
Le langage SQLQu'appelle-t-on SQL? SQL (Structured Query Language, traduisez Langage de requêtes structuré) est un langage de définition de données (LDD, ou en anglais DDL Data Definition Language), un langage de manipulation de données (LMD, ou en anglais DML,... www.commentcamarche.net/contents/sql/sqlintro.php3
SQL - Création de tableLe SQL, comportant un langage de définition de données (LDD), permet de créer des tables. Pour cela, il utilise le couple de mots clés CREATE TABLE. La création de tables Le création de tables se fait à l'aide du couple de mots-clés CREATE... www.commentcamarche.net/contents/sql/sqlcreate.php3
SQL - TriTri des résultats Il est possible en SQL d'organiser les résultats grâce à la clause ORDER BY. La clause ORDER BY est suivie des mots clés ASC ou DESC, qui précisent respectivement si le tri se fait de manière croissante (par défaut) ou... www.commentcamarche.net/contents/sql/sqltri.php3