L'indexation Dos and Don'ts, contenu Microsoft SQL Server à partir de SQL Server Pro
L'indexation est un si grand sujet obtenir une poignée sur ce qu'il faut faire et quoi ne pas faire lorsque vous développez vos stratégies d'indexation peut être difficile. Vous créez des index pour améliorer le temps de réponse des requêtes. Mais l'indexation est un acte d'équilibrage.
Chaque indice est une table gérée par le système, de sorte que chaque ajout ou modification des données dans une table utilisateur implique potentiellement la mise à jour des index, ce qui peut provoquer une baisse des performances des mises à jour de données. Tout le monde-des fournisseurs de produits à base de données des spécialistes performants pour CBM qui travaillent sur les lignes de front production-a des idées sur comment et quand à l'index. Voici ma liste personnelle de dos et à ne pas faire.
Indice de la faire colonne de clé étrangère
Ne pensez à utiliser un indice de recouvrement pour les requêtes qui renvoient quelques colonnes
Un indice de recouvrement contient toutes les colonnes de toutes les parties d'une requête, y compris les clauses et où. Si SQL Server peut analyser l'index pour trouver les données dont il a besoin, il ne doit pas lire les pages de données associées. Par conséquent, les performances des requêtes améliore. Par exemple, dans la table des auteurs dans la base de données Pubs, l'indice couvrant aunmind se compose de l'auteur nom (au_lname) et auteur prénom (au_fname). En règle générale, à moins que vous spécifiez différemment dans votre requête, SQL Server choisir d'utiliser un index. Lorsque vous travaillez avec de petites tables-tables qui correspondent à une ou deux pages (8K blocs d'espace sur le disque dur) -SQL Server choisir d'effectuer une analyse de table au lieu d'utiliser un index. Pour de petites tables, une analyse de table (qui ne nécessite qu'un seul accès au disque dur) est moins coûteuse que la lecture d'un indice, trouver l'emplacement des lignes de données, puis lire les lignes de données (ce qui nécessite deux disque dur accès). Mais pour une requête telle que
Ne pensez à utiliser un index en cluster pour les grandes tables et Une gamme d'valeurs requêtes
Un index cluster détermine l'ordre de stockage des enregistrements sur le disque. Le tableau des auteurs est ordonné en clusters sur au_id, donc au_id est la clé en cluster. Lorsque vous interrogez la table authors, sans préciser les critères la commande, comme suit:
Les résultats peuvent afficher dans un ordre de clé clusterisé (par exemple, la valeur la plus basse de au_id peut apparaître en haut de la liste, comme le montre la figure 2). Dans SQL Server 7.0 et versions ultérieures, commande du jeu de résultats peuvent varier, en fonction de la stratégie de récupération que l'optimiseur de requêtes choisit. Par conséquent, ne comptez pas sur commande record. Au lieu de cela, utilisez la clause ORDER BY option dans vos requêtes. Toutefois, si vous avez une grande table, en particulier une table que vous interrogez souvent en utilisant une condition amplitude de valeurs sur la clé cluster (par exemple lorsque au_id entre « 400-00-0000 » et « 499-99-9999 ») , la performance de requête améliorer lorsque vous utilisez un index cluster. Si vous vous joignez à cette table à d'autres tables et la clé en cluster est également une colonne jointe, la performance REJOIGNEZ de requête pourrait être mieux que si la requête exécutée la jointure sans un index cluster.
Faites Index Tri, regroupement et Agrégation Colonnes
Vous devez également considérer des colonnes d'indexation que vous utilisez pour commander et par ceux que vous utilisez dans une expression de regroupement. Vous pouvez bénéficier de l'indexation des colonnes que les fonctions MIN (), MAX (), COUNT (), SUM () et AVG () utilisent pour agréger les données. Lorsque vous utilisez les fonctions MIN () et MAX (), SQL Server effectue une recherche simple pour les valeurs minimales et maximales dans la colonne, respectivement. Si les valeurs de données d'un index sont classés par ordre croissant, SQL Server peut lire l'index pour déterminer rapidement les valeurs correctes MIN () ou MAX (). L'amplitude des valeurs requête comprend un filtre ou une contrainte (exprimée dans la requête SELECT est clause WHERE ou HAVING) pour limiter les lignes que les rendements de la requête. De même, lorsque vous avez un index, vous pouvez optimiser le tri des données (en utilisant la clause ORDER BY) et le regroupement des données (en utilisant la clause GROUP BY), en particulier si le ou les tables que vous interrogez contiennent de nombreuses lignes.
Considérons un DSS Ne
Et le DSS ne doit pas nécessairement être en lecture seule: Vous pouvez créer des vues sur le DSS qui sont conçus pour faciliter la rédaction du rapport et qui, en raison de leur complexité, rendre les données vues par un acte de vue comme si elle est en lecture seule . Lorsque vous implémentez un DSS, vous pouvez prendre la charge de votre requête base de données transactionnelle en analysant les requêtes les plus fréquemment exécutées, ce qui crée des index pour couvrir les tables et la création de vues indexées efficaces pour les données.
Ne pas trop Index Tables transactionnelles avec une forte activité E / S
Une arme à double tranchant
indexation appropriée peut faire une base de données lent de meilleurs résultats. A l'inverse, l'indexation incorrecte peut faire une base de données haute performance mal géré. La différence dépend de la façon dont vous structurez les index et sur votre suivi. Vous devez tester et observer l'effet d'un indice nouvellement créé sur votre environnement de production, et vous devez supprimer des index qui compromettent les performances de votre base de données. Votre stratégie d'indexation est une partie importante de vos responsabilités en tant que modeleur de données physiques et DBA.