Informations sur les performances de requête dans une base de données Access

Traductions disponibles Traductions disponibles
Numéro d'article: 209126 - Voir les produits auxquels s'applique cet article
Modéré : Nécessite macro base, de codage et les compétences de l'interopérabilité.

Cet article s'applique uniquement à une base de données Microsoft Access (.mdb).

Pour une Access 97 version de cet article, reportez-vous 112112.
Agrandir tout | Réduire tout

Sommaire

INTRODUCTION

Cet article explique comment optimiser les performances des requêtes dans Microsoft Access 2000, dans Microsoft Access 2002 et dans Microsoft Office Access 2003. Les rubriques suivantes sont incluses :
  • Optimiseur de requête pour le moteur de base de données Microsoft Jet
  • Temporisation de requête
  • Analyse des performances
  • Conseils pour améliorer les performances des requêtes
Cet article suppose que votre base de données comporte des tables locales à la place des tables liées (ou attachées). Si vos tables sont liées, ces informations s'appliquent toujours. Toutefois, il existe d'autres problèmes qui affectent la requête performances avec les tables liées. Pour plus d'informations sur l'amélioration des performances avec les tables liées, vous pouvez rechercher la base de connaissances Microsoft en utilisant la chaîne suivante :
ODBC et d'optimisation et de tables

Plus d'informations

Optimiseur de requête pour le moteur de base de données Microsoft Jet

Le moteur de base de données Jet contient plusieurs composants, mais le composant le plus important aux requêtes (et le plus complexe) est l'optimiseur. Le Optimizer est basé sur le coût. Cela signifie que l'optimiseur affecte un coût de temps à chaque tâche de requête et choisit ensuite la liste des tâches à effectuer moins coûteuse qui génère le jeu de résultat voulu. Plus une tâche nécessaire à l'exécution, est le plus coûteux de cette tâche.

Pour décider quelle stratégie de requête à utiliser, l'optimiseur utilise les statistiques. Les facteurs suivants sont les facteurs ces statistiques sont basées sur :
  • Le nombre d'enregistrements dans une table
  • Le nombre de pages de données dans une table
  • L'emplacement de la table
  • Si les index sont présentes
  • Les index uniques sont
Selon ces statistiques, l'optimiseur sélectionne puis la stratégie de mieux la requête interne pour traiter une requête particulière.

Les statistiques sont mises à jour chaque fois qu'une requête est compilée. Une requête est marquée pour la compilation lorsque vous enregistrez les modifications apportées à la requête (ou ses tables sous-jacentes) et lorsque la base de données est compactée. Si une requête est marquée pour l'élaboration, la compilation et la mise à jour des statistiques exécute la prochaine fois que la requête exécutée. Compilation généralement prend une seconde à quatre secondes.

Si vous ajoutez un nombre important d'enregistrements à votre base de données, vous devez ouvrir et enregistrez vos requêtes pour recompiler les requêtes. Par exemple, si vous concevez et ensuite testez une requête en utilisant un petit ensemble de données exemple, vous devez recompiler la requête après avoir ajouté des enregistrements supplémentaires à la base de données. Lorsque vous effectuez cette opération, vous souhaitez vous assurer que les performances de requête optimal sont obtenues lorsque votre application est en cours d'utilisation.

Remarque Vous ne pouvez pas afficher les régimes d'optimisation moteur Jet de base de données et vous ne pouvez pas spécifier comment optimiser une requête. Toutefois, vous pouvez utiliser la documentation de base de données pour déterminer si les index sont présents et un index uniques est.

Pour plus d'informations sur le problème peut se produire lorsque vous utilisez la documentation de base de données dans Access 2000, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
207782ACC2000 : Erreur à l'aide de la base de données Documenteur si des objets sont ouverts

Temporisation de requête

Il existe deux mesures beaucoup de temps pour une requête SELECT :
  • Heure pour afficher le premier écran de données
  • Délai permettant d'obtenir le dernier enregistrement
Si une requête renvoie uniquement un écran de données, ces temps deux mesures sont identiques. Si une requête renvoie le nombre d'enregistrements, ces mesures de temps peuvent être très différentes.

Si deux mesures sont les mêmes lorsque vous affichez une requête sélection en mode feuille de données, vous voyez un écran de données et un nombre total d'enregistrements qui sont retournés par la requête, telles que "Enregistrement 1 de N." S'il est plus rapide pour le moteur de base de données Jet afficher l'écran de la première de données que pour compléter la requête, puis extraire le dernier enregistrement, vous voyez un écran de données, mais aucun N dans "Enregistrement 1 sur N. La valeur de N est vide jusqu'à ce que la requête est terminée ou jusqu'à ce que vous faites défiler jusqu'à le dernier enregistrement.

Ce comportement est le résultat du moteur de base de données Jet sélectionnant l'une des deux stratégies de performances :
  • Effectuer la requête et afficher des données
  • Afficher des données et puis compléter la requête
Vous ne pouvez pas contrôler la stratégie utilisée. Le moteur de base de données Jet sélectionne la stratégie la plus efficace.

Analyse des performances

Si vous utilisez Microsoft Access 7.0, Access 97, Access 2000, Access 2002 ou Access 2003, vous pouvez utiliser l'Analyseur de performance pour analyser les requêtes de votre base de données. Dans la mesure où l'analyse de performances de requête est étroitement liée au moteur de base de données Jet, l'Analyseur de performance suggère ajoutez index uniquement lorsque les index seront réellement utilisées par le moteur de base de données Jet pour optimiser la requête. Cela signifie que l'Analyseur de performance peut fournir des conseils de performances sont plus spécifiques à votre base de données que les suggestions générales répertoriées ci-dessous dans la section «Conseils pour améliorer les performances des requêtes».

Pour exécuter l'Analyseur de performance dans Access 7.0, dans Access 97, dans Access 2000, dans Access 2002 ou Access 2003, procédez comme suit :

Dans le menu Outils, cliquez sur analyser, puis cliquez sur performances.

Conseils pour améliorer les performances des requêtes

Pour améliorer les performances des requêtes, essayez les conseils suivants :
  • Compacter votre base de données

    Lorsque vous compactez votre base de données, vous pouvez accélérer les requêtes. Lorsque vous compactez votre base de données, les enregistrements de la table sont réorganisées afin que les enregistrements résident dans des pages adjacentes de la base de données qui sont commandés par la clé primaire de la table. Cela améliore les performances des analyses séquentielles des enregistrements dans la table car le nombre minimal de pages de base de données a désormais à lire pour extraire les enregistrements souhaités. Une fois votre base de données compactée, exécutez chaque requête pour compiler la requête afin que chaque requête aura maintenant les statistiques de la table mises à jour.
  • Indexer un champ

    Indexer n'importe quel champ est utilisée pour définir des critères pour les champs de requête et les champs d'index des deux côtés d'une jointure. Ou créez une relation entre ces deux champs. Lorsque vous créez une relation avec l'intégrité référentielle appliquée, le moteur de base de données Jet crée un index sur la clé étrangère s'il n'existe pas déjà. Sinon, le moteur de base de données Jet utilise l'index existant.

    Remarque Le moteur de base de données Jet optimise automatiquement une requête qui joint une table Access sur votre disque dur et une table du serveur ODBC quand l'accès table est petite et si les champs joints sont indexés. Dans ce cas, Access améliore les performances en demandant uniquement les enregistrements requis au serveur. Assurez-vous que l'indexation des tables que vous joindre à partir de sources différentes sur les champs de jointure.
  • Sélectionnez le type de données plus petit qui convient

    Lorsque vous définissez un champ dans une table, sélectionnez le plus petit type de données appropriée pour les données dans le champ. Assurez-vous également que les champs qui vous souhaitez utiliser dans les jointures ont le même types de données ou le types de données compatibles, comme NuméroAuto et numérique (si la propriété TailleChamp (FieldSize) a la valeur Entier Long).
  • Ajoutez uniquement les champs dont vous avez besoin

    Lorsque vous créez une requête, ajoutez uniquement les champs dont vous avez besoin. Dans les champs qui sont utilisés pour définir des critères, cliquez pour désactiver la case à cocher Afficher si vous ne souhaitez pas afficher ces champs.
  • Enregistrez l'instruction SQL comme requête

    Si la propriété RecordSource d'un formulaire ou rapport a la valeur une instruction SQL, enregistrez l'instruction SQL sous la forme d'une requête et puis définissez la propriété RecordSource le nom de la requête.
  • Évitez les champs calculés

    Évitez les champs calculés dans les sous-requêtes. Si vous ajoutez une requête qui contient un champ calculé à une autre requête, l'expression dans le champ calculé ralentit les performances de la requête de niveau supérieur. Dans l'exemple suivant, requête R1 est utilisée comme entrée pour la requête R2 :
    Q1 : SELECT IIF([MyColumn]="Yes","Order Confirmed","Order Not Confirmed") AS X FROM MyTable ;
    Q2 : SELECT * FROM T1 WHERE X = "Commande confirmée" ;
    Étant donné que l'expression IIF en R1 ne peut pas être optimisée, R2 ne peut pas l'être non plus. Si une expression non optimisable est imbriquée dans une sous-requête, tous les la requête ne peut pas être optimisé.

    Une autre façon de construire la requête est la suivante :
    Q1 : SELECT * FROM MaTable WHERE MaColonne = "Yes" ;
    Si les expressions sont nécessaires dans la sortie, essayez de placer les expressions dans un contrôle dans un formulaire ou d'état. Par exemple, vous pouvez modifier la requête précédente en une requête paramètre demandant la valeur de MaColonne et puis baser un formulaire ou un rapport sur la requête. Dans le formulaire ou sur le rapport, vous pouvez ensuite ajouter un contrôle calculé qui affiche "Hello" ou "Au revoir", selon la valeur qui est contenue dans MaColonne.

    Construire la requête comme suit :
    PARAMETERS [pour voir les commandes confirmées, saisissez Oui. Pour voir les commandes non confirmées, saisissez non.] Texte ;
    SÉLECTIONNEZ *
    FROM MaTable
    WHERE MaColonne = [pour voir les commandes confirmées, saisissez Oui. Pour voir les commandes non confirmées, saisissez n°] ;
    Dans le contrôle calculé du formulaire ou rapport, tapez :
    = IIF([MyColumn]="Yes","Order Confirmed","Order Not Confirmed")
  • Spécifiez GROUP BY

    Lorsque vous regroupez des enregistrements par les valeurs dans un champ de jointure, spécifiez regroupement pour le champ qui se trouve dans la même table que le champ que vous totalisez (calcul un agrégat sur). Par exemple, dans la base de données exemple Les Comptoirs.mdb, si vous créez une requête qui totalise le champ quantité de la table Détails commandes, puis groupe par RéfCommande, vous pouvez spécifier regroupement pour le champ n° commande dans les détails des commandes table. Si vous spécifiez regroupement pour le champ RéfCommande de la table commandes, Access doit tout d'abord une jointure sur tous les enregistrements, puis effectuez le regroupement, au lieu de faire le regroupement et ensuite la jointure uniquement les champs requis.

    Pour améliorer la vitesse, utilisez regroupement sur le moins de champs que possible. Également utiliser la fonction premier si vous le pouvez.

    Si une requête opérations comprend une jointure, envisagez de regroupement d'enregistrements dans une même requête, puis en ajoutant cette requête à une requête distincte qui effectue la jointure. Lorsque vous effectuez cette opération, peut améliorer les performances avec certaines requêtes.
  • Éviter les critères de requête restrictifs

    Si possible, évitez les critères de requête restrictifs sur les champs calculés et sur les champs non indexés. Utiliser des expressions de critères que vous pouvez optimiser.
  • Tester les performances de votre requête dans un champ qui est utilisé dans une jointure entre tables

    Si vous utilisez des critères pour limiter les valeurs dans un champ qui est utilisé dans une jointure entre tables avec une relation un-à-plusieurs, testez si la requête s'exécute plus rapidement lorsque les critères sont placés sur le côté «un» ou sur le côté «plusieurs» de la jointure. Dans certaines requêtes, vous pouvez bénéficier de performances plus rapides en ajoutant les critères dans le champ du côté «un» de la jointure que du côté «plusieurs» de la jointure.
  • Champs de tri des index

    Indexez les champs que vous utilisez pour le tri.
  • Utilisez des requêtes de création de table pour créer des tables

    Si vos données changent rarement, utilisez des requêtes de création de table pour créer des tables à partir des résultats de votre requête. Utiliser les tables qui en résultent plutôt que des requêtes comme base pour vos formulaires, vos rapports ou vos autres requêtes. Assurez-vous d'ajouter des index conformément aux instructions que vous lisez dans cet article.
  • Évitez d'utiliser des fonctions de regroupement domaine

    Évitez d'utiliser des fonctions de regroupement de domaine, comme la fonction DLookup pour accéder aux données à partir d'une table qui ne figure pas dans la requête. Fonctions de regroupement domaine sont spécifiques à Access, et cela signifie que le Jet moteur de base de données ne peut pas optimiser les requêtes qui utilisent des fonctions de regroupement de domaine. Au lieu de cela, ajoutez la requête la table de la fonction accédait ou créez une sous-requête.
  • Utilisez des en-têtes de colonne fixes

    Si vous créez une requête analyse croisée, utilisez des en-têtes de colonne fixes chaque fois que cela est possible.
  • Utiliser des opérateurs

    Utilisez l'opérateur Between... And, l'opérateur in, ainsi que le = opérateur sur des champs indexés.
  • Optimiser les performances sur le serveur

    Pour les requêtes de mise à jour en bloc sur des sources de données ODBC, optimisez les performances sur le serveur en définissant la propriété FailOnError sur Oui.

Références

Pour plus d'informations sur l'optimisation des performances dans Microsoft Access 2000, cliquez sur Aide sur Microsoft Access dans le menu aide, tapez optimiser les performances dans le Compagnon Office ou l'aide intuitive et puis cliquez sur Rechercher pour afficher la rubrique.
Pour plus d'informations sur l'optimisation des performances dans Microsoft Access 2002, cliquez sur Aide Microsoft Access dans le menu aide, tapez Amélioration des performances d'un accès base de données dans le Compagnon Office ou l'aide intuitive, puis cliquez sur Rechercher pour afficher la rubrique.

Pour plus d'informations sur l'amélioration des performances dans Access 2003, cliquez sur Aide de Microsoft Office Access dans le menu aide, tapez Amélioration des performances de votre base de données dans la recherche du volet Assistance, puis cliquez sur lancer la recherche pour afficher la rubrique.

Pour plus d'informations sur l'utilisation des index dans Access 2000, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
209564ACC2000 : Index composés doivent restreindre premier champ indexé

Propriétés

Numéro d'article: 209126 - Dernière mise à jour: mercredi 28 novembre 2007 - Version: 2.5
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Office Access 2003
  • Microsoft Access 2002
  • Microsoft Access 2000 Standard Edition
Mots-clés : 
kbmt kbquery kbhowto kbperformance kbinfo kbusage KB209126 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 209126
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com