Journal SQL & Index

Posté par  (site web personnel) .
Étiquettes : aucune
0
5
juin
2003
Je suis en train de mettre en place une base de donnée (certainement sous MySQL, peut etre PostGreSQL).

Il y aura surtout sur cette base des accès en lecture, et la base est quand même relativement imposante enfin surtout par rapport à ce que j'ai l'habitude de faire) - 6000 enregistrements.

Comment faire pour optimiser la vitesse des requetes sur cette base ? Où mettre des indexs, pourquoi ?

Merci, journal
  • # Re: SQL & Index

    Posté par  . Évalué à 1.

    On aura du mal a te dire ou mettre des index, etc... si on ne sait pas ce que tu vas stocker dans ta base de donnees et quels types de requetes seront les plus frequents entre autres.
    • [^] # Re: SQL & Index

      Posté par  (site web personnel) . Évalué à 1.

      Bah disons que je ne le sais pas encore moi même ;(

      Et personne n'aurais des URLs vers des documents qui explique comment marche les indexs ?

      En gros ça sera un système de recherche multi-critère (c'est ce que l'on m'a dit, j'en serais plus d'ici 2 jours)

      merci
      • [^] # Re: SQL & Index

        Posté par  (site web personnel) . Évalué à 1.

        Je gère une médiathèque de plus de 25 000 enregistrements (différents medias et types de medias sont répertoriés) et les recherches sont relativement rapides, à condition de bien formuler tes requêtes (Il y a dans la mienne énormément de critères, type de media, libre de droit ou non, année, titre, description, mots-clés et j'en passe.)

        J'ai eu l'exemple d'une requête qui mettait plus de 3 à 4 minutes à s'effectuer (sur le serveur, un athlon XP 1800+) alors qu'en fait c'était juste une jointure mal placée...

        Bref, pour 6000 enregistrements, à moins de faire tourner ça sur un P200, je ne suis pas sûr si tu devrais te poser ces questions :) Tout devrait bien se passer si tu ne fais pas le boulet sur les requêtes SQL.
        • [^] # Re: SQL & Index

          Posté par  (site web personnel) . Évalué à 1.

          En fait ayant l'habitude de bosser sur des bases de petites tailles (200, 300 enregistrements maximum) et devant d'ici peu bosser sur une base de 6000 enregitrements, je me posais des questions sur l'optimisation.

          Je pense que ça peut quand même apporté encore plus de rapidité les indexs sur la table, non ?

          ce n'est pas la seul table du site non plus, et je n'ai pas envie de ralentir tout le site pour une histoire de recherche trop longue...

          Dernière question, est-ce que il peut etre utilie pour une table de cette taille là de voir ce que pourrais proposer par exemple un base PostgreSQL ?
          • [^] # Re: SQL & Index

            Posté par  . Évalué à 1.

            J'utilise MySQL avec Linux, PHP et Apache pour le serveur Intranet de ma société.

            Ma base de données est constituée de 77 tables de plusieurs dizaines de milliers d'enregistrements chacunes (350 000 pour la plus grosse).

            Je peux t'assurer que MySQL est la base de donnée la plus rapide en consultation que je connaisse même avec un ordinateur peux puissant (Plus rapide que Oracle, DB2 sur AS400 et Access).

            Je suis convaincu qu'avec une table de 6000 enregistrements, tu n'auras même pas besoins de clé, car les résultats seront instantanées.

            Par contre, il faudra prévoir des clés, si cettez table doit être reliée à d'autres tables. Il faut prévoir des clés au minimum sur les champs servant aux jointures.

            Concernant la documentation, il suffit de taper "mysql sql" sur Google pour être inondée d'informations très interessantes sur le langange sql et les fonctions de MySQL.

            Pour finir, il est très facile avec phpMyAdmin de créer, modifier ou supprimer des clés, ce qui te permettra de tester différentes configurations

            Bonne continuation.
  • # Re: SQL & Index

    Posté par  . Évalué à 3.

    en gros un index ca sert quand tu dois remonter 20% (80/20 habitue :) de la table pour une requete.

    Tu fais un index sur un attribut ou groupe d'attributs qui sert(vent) souvent dans tes criteres de recherche (clause where) avec =, <, > ou between .

    à savoir qu'un index mettra plus de temp a l'insertion.

    En esperant avoir aidé

    Dam
  • # Re: SQL & Index

    Posté par  . Évalué à 1.

    Lorsque tu crée un index sur un domain (attribut, champ) d'une table, le SGBD (Système de gestion de base de donnée ie MySQL dans ton cas et SGBDR pour relationnel dans le cas de PostGreSQL) crée un fichier contenant un (ou plusiuers) pointeur(s) vers le(s) enregistrement(s) concernés. C'est en quelque sorte un raccourci. Tu peux mettre des index sur quaziment tous types de domain, mais tu perd de l'espace disque (sur 6000 enregistrement, à vrai dire c'est pas la mort) et les insertion de nouveaux enregistrement plus long (la base doit écrire dans les fichiers d'index).

    Pour chaque clé (primaire ou secondaire), un index est crée automatiquement.
  • # Re: SQL & Index

    Posté par  (site web personnel) . Évalué à 1.

    Donc en gros si je comprend bien, il faudrait mettre en place un index sur les colonnes ou je fais beaucoup de recherche...

    imaginons que j'ai une liste de personne avec come champ (nom, prénom, ville) et que je fasse des recherches sur la ville de la personne, il faut que je passe la colonne ville en index ?
    • [^] # Re: SQL & Index

      Posté par  . Évalué à 1.

      Je te renvoi vers Aegir de LinuxFrench qui avait sorti une série d'article pour PostGreSQL qui explique les "Index, Clefs et jointures"

      http://www.linuxfrench.net/article.php?id_article=648(...)

      Cette série d'article m'a personnelement beaucoup aidé.
      Bonne lecture.
    • [^] # Re: SQL & Index

      Posté par  (site web personnel) . Évalué à 1.

      En gros, si tu as:

      SELECT * FROM person WHERE ville='PARIS';

      Il vaudra mieux placer un index sur le champs ville.

      Si tu as deux tables:

      CREATE TABLE person(nom varchar(50), prenom varchar(50), ville int);
      CREATE TABLE ville(id int, nom varchar( 50 ));

      Tu feras une requête du type:
      SELECT * FROM person, ville WHERE ville.id=person.ville AND ville.nom='PARIS'

      Tu mettra un index sur l'élément de jointure ville.id (clé primaire d'ailleurs) et person.ville et sur ville.nom

      Tout cela est à tester quand ton application sera terminée. Il peut arriver qu'un index ralentisse les requêtes quand il y a de petites tables (peu d'enregistrement)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.