Question

Nous avons une base de données fournisseur livré que ce point, je suis en mesure d'éviter de faire des changements dans la structure de base de données. Nous allons bientôt les tableaux directement interroger directement un projet connexe. Afin de tirer toutes les données dont nous avons besoin, nous devrons créer une grande instruction SQL avec plusieurs syndicats.

select ... from table1
union
select ... from table2
...
select ... from tableN

La vitesse est la priorité absolue pour ce projet. Serait-il plus rapide de créer une vue de faire les jointures puis juste interroger ce point de vue (et donc d'apporter des modifications à la base de données des fournisseurs) ou tout simplement exécuter l'instruction de notre syndicat demande?

Je sais que les problèmes potentiels liés à apporter des modifications à la base de données des fournisseurs afin donc pourquoi je suis à la recherche de commentaires.

Était-ce utile?

La solution

En ce qui concerne les bases de données de fournisseurs, je serais très réticents à apporter des modifications à des tables existantes. Ajouter quelque chose comme une vue semble un peu plus sûr puisque vous êtes le seul qui l'utilisera. Ma plus grande préoccupation à la vue serait si vous avez jamais une mise à jour de votre fournisseur qui a apporté des modifications à votre base de données et vous risquez de perdre la vue.

Je ne pense pas que vous verriez les gains de performance de l'utilisation de la vue, à moins que vous avez utilisé une vue indexée. Malheureusement, vous ne pouvez pas créer des index sur une vue qui est créée en utilisant une union (au moins dans SQL Server).

Personnellement, quand il s'agit de mettre en application de la logique vs le mettre dans le DB je me penche vers DB. Dans mon expérience de ces types de changements sont plus faciles à déployer et à maintenir.

Si j'étais dans votre situation, j'aller de l'avant de créer la vue si elle vous rendra la vie plus facile. Mais encore une fois, ne vous attendez pas des gains de performance.

Autres conseils

Aucune vue ne sera pas plus rapide (sauf pour le temps de développement).

Quelle serait plus rapide est d'utiliser UNION ALL si cela va fonctionner. UNION recherche des dossiers dupliqués et les retire du résultat final. Si vous connaissez les dossiers par la conception (comme chaque table est un clinet differnt ou chaque table a une plage de dates differnt) ne peut pas être dupliqué, UNION ALL ne pas essayer de DISTINCT ResultSet et fonctionne donc beaucoup plus rapide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top