Il semble être équitablement accepté que, y compris le propriétaire de schéma de la requête, augmente les performances de la DB, par exemple:
Sélectionnez X à partir de [DGO] .foo code> vs Sélectionnez X de FOO .
est censé enregistrer une recherche, car SQL Server recherchera une table FOO appartenant à l'utilisateur dans le contexte de la connexion. P>
aujourd'hui on m'a dit que Toujours compris le nom de la base de données améliore la performance de la même manière, même si vous interrogez la base de données que vous avez sélectionnée dans votre chaîne de connexion: p>
SELECT x FROM MyDatabase.[dbo].Foo
5 Réponses :
Essayez-le? Juste en boucle à travers un million de requêtes de la fois et voir laquelle on se termine en premier. P>
Je suppose que c'est une charge de couchette cependant. Les développeurs de MS SQL consacrent des millions d'heures de recherche sur l'efficacité des algorithmes de recherche et des méthodes de stockage uniquement pour être contrecarré par les utilisateurs qui ne spécifient pas les noms de table pleinement qualifiés? Risible. P>
Comme Spencer l'a dit - essayez bien, assurez-vous d'effacer le cache chaque fois que cela interférera avec vos résultats. P>
http://www.devx.com/tips/tip/14401 p>
Je serais aussi surpris si cela a fait une différence appréciable. P>
SQL Server ne collectera pas de manière supplémentaire si le schéma par défaut est identique. Il devrait être inclus si ce n'est pas et c'est une requête qui est utilisée beaucoup. P>
Le nom de la base de données ne bénéficiera pas de la performance de la requête. Je pense que cela pourrait être vu avec le plan d'exécution estimé dans le studio de gestion. P>
Dans ce cas, je préférerais personnellement la lisibilité sur l'augmentation de la performance minuscule que cela pourrait éventuellement causer, le cas échéant.
SELECT * FROM MyDatabase.[dbo].Foo
Une chose à garder à l'esprit est que ceci est une liaison de compilation, pas une exécution une. Donc, si vous exécutez la même requête 1 million de fois, seule la première exécution «frappera» le temps de recherche, le reste réutilisera le même plan et les mêmes plans sont pré-liés (les noms sont déjà résolus à des identifiants d'objet). p>
Si cela fait une différence, il ajoute un problème de maintenance car toutes vos requêtes ont le nom de la base de données. Rend très difficile de renommer une base de données.
Dépend de ce que votre entretien. Avoir des noms entièrement qualifiés à l'intérieur de ma procédure particulière garantit de fonctionner avec précision de la même manière même lorsqu'il est attaché à une DB différente dans mon environnement de test - dans mon scénario particulier, je souhaite le test env. produire des résultats de «production» en ce qui concerne le processus stocké. Peut-être pas une meilleure pratique, je me rends compte, mais notre vaste paysage de magasins de données n'a pas de contre-de-pièces entièrement reproduites dans un état de Sandbox'd propre dans un domaine de test séparé, de sorte que bon nombre de nos environnements de test / développement sont au mieux un mélange de bogus et de données de production.