2010-02-10 7 views
0

Nous avons 15 tables de suivi d'audit qui doivent être combinées pour rechercher des ajustements d'inventaire avec certains critères seulement.Quelle approche ALL Union doit être utilisée?

Est-il préférable de faire un ALL UNION avec toutes les tables, puis filtrer pour les critères, OU jeter les critères dans le mélange sur chaque table avant de faire UNION ALL?

Chaque table ne contient que quelques milliers d'enregistrements et la liste filtrée finale est généralement inférieure à un millier, ce qui est en cours de production pour la génération de rapports.

Une application foxpro génère les tables et nous avons peu de contrôle sur la conception de la base de données à cette fin.

Répondre

2

Il est généralement recommandé de réduire le nombre de lignes le plus tôt possible dans la requête, ce qui signifie filtrer chaque requête plutôt que filtrer le jeu de résultats unifié. Il y a des chances que votre jeu UNION ALL entraîne la création d'une table temporaire si vous filtrez après l'union, et ce n'est pas le meilleur si vos tables sont grandes (je veux dire ... big).

Je pense que nous pouvons accepter une exception à la "bonne pratique générale" ci-dessus ... Dans les cas où avoir les filtres à un seul point améliore grandement la lisibilité/maintenabilité de la requête. (Et les avantages dépassent la perte potentielle).

+0

Donc, garder la table petite a la priorité sur l'interrogation supplémentaire? En fin de compte, je fais tout cela parce que tout le mouvement est noté comme positif et nous devons annuler les mouvements pour les manifestes. merci pour l'aide – datatoo

+0

UNION ALL créera de manière incrémentielle le jeu de résultats à partir des sous-requêtes. Si ceux-ci renvoient moins de lignes, vous gagnez en efficacité globale. En règle générale, plus le contenu de votre table est petit, plus les requêtes seront rapides. Mais je ne pense pas qu'il soit souhaitable de rendre les données moins claires simplement parce que cela prendrait moins de lignes (je ne dis pas que c'est votre cas ici) – Romain

+0

Aussi ... Filtrer avant UNION pourrait aider votre DB à tirer profit des existants indices, résultant en de meilleures performances globales. – Romain