2013-05-21 3 views
7

Dans Teradata je peux utiliser une déclaration comme ...STATISTIQUES L'utilisation de Teradata COLLECT

collect statistics on my_table column(col1) 

Ce rassemblera les statistiques sur la table et les stocker dans des vues DBC comme ColumnStats, IndexStats et MultiColumnStats. J'ai également l'impression que l'optimiseur (moteur d'analyse) trouvera les statistiques lorsqu'elles sont disponibles et les utilisera à la place du nombre estimé de cardinalité/index de la table pour prendre de meilleures décisions sur l'exécution d'une requête.

Tout cela semble très bien, mais j'ai quelques questions.

  • Y a-t-il des inconvénients à utiliser collect stats?
  • Quand est-il approprié/inapproprié d'utiliser des statistiques de collecte dans vos scripts SQL?
  • Quel est l'avantage de performance pour collecter des statistiques sur un champ déjà indexé?
  • Combien de temps les statistiques sont-elles stockées pour (table, tables volatiles)?
  • D'autres commentaires concernant collect statistics seraient appréciés.
+0

Désolé, mais l'OMI cette question est un « bon ajustement » pour SO. La collecte de statistiques est une partie très importante, peut-être essentielle, de Teradata et de nombreux articles en ligne traitent de ce sujet. En outre, vous avez trop de différentes parties à cette question à répondre clairement. N'importe laquelle des balles pourrait être utile de demander à nouveau. Vote pour fermer comme "pas constructif". – BellevueBob

+0

Hey Bob pensez-vous qu'il serait mieux adapté pour la migration de la question vers le site de base de données Administrateurs SO plutôt que de voter "pas constructif"? J'ai trouvé des articles mais aucun ne répond vraiment à ma (mes) question (s) – ChrisCamp

Répondre

10

1> Y at-il des inconvénients à utiliser les statistiques de collecte?

Oui, collecter les statistiques lui-même prend du temps, il trouve en fait les données d'AMPS et insère les statistiques dans les tables du dictionnaire.

Supposons que vous ayez une définition de table comme:

ct t1 (x1 int, int y1, z1 int);

La table contient des millions de lignes et z1 n'est jamais utilisé dans les conditions ST/Join, il n'est donc pas utile de collecter des statistiques sur z1.

2> Quand est-il approprié/inapproprié d'utiliser des statistiques de collecte dans vos scripts SQL?

Déjà répondu ci-dessus. Si une colonne doit être utilisée comme ST/Join condition .i.e dans where ou on clause, vous devez collecter des statistiques, sinon ce n'est pas nécessaire.

3> Quel est l'avantage de la performance à collecter des statistiques sur un champ déjà indexé?

ct t1 (x1 int, y1 int) indice primaire (x1);

pour une requête simple comme sel * à partir de t1 où x1 = 5;

démontrera l'utilité des statistiques de collecte.

Comment?

l'optimiseur peut estimer correctement combien de lignes cette requête va sélectionner et si t1 va être joint avec dire t2, une jointure efficace sera choisie par l'optimiseur.

4> Combien de temps les statistiques sont-elles stockées pour (table, tables volatiles)?

Tableau: en permanence.

tables volatiles: jusqu'à l'expiration de la session.

5> Tout autre commentaire concernant les statistiques de collecte serait apprécié.

Rien n'a été discuté à propos des statistiques multicolonnes.

Say, la requête est comme:

sel * de t1 t2 rejoindre sur y1 = y2 et x1 = 2; Ensuite, la collecte de statistiques multi-colonnes sur (x1, y1) serait très utile pour l'optimisation.

En outre, si la démographie de table a été modifiée (augmentation du nombre de lignes), vous devez envisager un nouveau collecte des statistiques

+0

Hé là utilisateur, j'apprécie la réponse réfléchie – ChrisCamp