{"id":408,"date":"2012-05-23T00:00:34","date_gmt":"2012-05-23T00:00:34","guid":{"rendered":"http:\/\/www.sqlserver.fr\/blog\/?p=408"},"modified":"2026-05-02T14:31:13","modified_gmt":"2026-05-02T12:31:13","slug":"une-vue-nest-quun-alias","status":"publish","type":"post","link":"https:\/\/www.sqlserver.fr\/blog\/une-vue-nest-quun-alias\/","title":{"rendered":"Une vue n&rsquo;est qu&rsquo;un alias"},"content":{"rendered":"<p>Il est tr\u00e8s fr\u00e9quent d&rsquo;utiliser des vues pour simplifier la vie des personnes r\u00e9alisant des requ\u00eates, qu&rsquo;il s&rsquo;agisse de d\u00e9veloppeurs ou bien d&rsquo;utilisateurs avanc\u00e9s qui r\u00e9alisent des requ\u00eates applicatives.<\/p>\n<p>Mais beaucoup oublient que les vues sont, dans la plupart des cas, de simples alias, et que la requ\u00eate ex\u00e9cut\u00e9e par le moteur garde toute la charge due \u00e0 la complexit\u00e9 de la d\u00e9finition des vues utilis\u00e9es.<!--more--><\/p>\n<p>Tout d&rsquo;abord, choisissons de d\u00e9finir une vue, et observons le comportement du moteur de donn\u00e9es lorsqu&rsquo;une requ\u00eate consomme cette vue.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\">CREATE VIEW [HumanResources].[vEmployee]\r\nAS\r\nSELECT\r\n    e.[BusinessEntityID]\r\n    ,p.[Title]\r\n    ,p.[FirstName]\r\n    ,p.[MiddleName]\r\n    ,p.[LastName]\r\n    ,p.[Suffix]\r\n    ,e.[JobTitle]\r\n    ,pp.[PhoneNumber]\r\n    ,pnt.[Name] AS [PhoneNumberType]\r\n    ,ea.[EmailAddress]\r\n    ,p.[EmailPromotion]\r\n    ,a.[AddressLine1]\r\n    ,a.[AddressLine2]\r\n    ,a.[City]\r\n    ,sp.[Name] AS [StateProvinceName]\r\n    ,a.[PostalCode]\r\n    ,cr.[Name] AS [CountryRegionName]\r\n    ,p.[AdditionalContactInfo]\r\nFROM [HumanResources].[Employee] e\r\n\tINNER JOIN [Person].[Person] p\r\n\tON p.[BusinessEntityID] = e.[BusinessEntityID]\r\n    INNER JOIN [Person].[BusinessEntityAddress] bea\r\n    ON bea.[BusinessEntityID] = e.[BusinessEntityID]\r\n    INNER JOIN [Person].[Address] a\r\n    ON a.[AddressID] = bea.[AddressID]\r\n    INNER JOIN [Person].[StateProvince] sp\r\n    ON sp.[StateProvinceID] = a.[StateProvinceID]\r\n    INNER JOIN [Person].[CountryRegion] cr\r\n    ON cr.[CountryRegionCode] = sp.[CountryRegionCode]\r\n    LEFT OUTER JOIN [Person].[PersonPhone] pp\r\n    ON pp.BusinessEntityID = p.[BusinessEntityID]\r\n    LEFT OUTER JOIN [Person].[PhoneNumberType] pnt\r\n    ON pp.[PhoneNumberTypeID] = pnt.[PhoneNumberTypeID]\r\n    LEFT OUTER JOIN [Person].[EmailAddress] ea\r\n    ON p.[BusinessEntityID] = ea.[BusinessEntityID];<\/pre>\n<p><a href=\"https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2012\/05\/Plan1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-454\" title=\"Plan1\" src=\"https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2012\/05\/Plan1-620x257.png\" alt=\"\" width=\"620\" height=\"257\" srcset=\"https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2012\/05\/Plan1-620x257.png 620w, https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2012\/05\/Plan1-300x124.png 300w, https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2012\/05\/Plan1.png 1403w\" sizes=\"auto, (max-width: 620px) 100vw, 620px\" \/><\/a><\/p>\n<p>On peut constater que, malgr\u00e9 l&rsquo;utilisation du nom de la vue (qui a donc simplifi\u00e9 le travail du d\u00e9veloppeur), le moteur remplace en arri\u00e8re plan la vue par sa d\u00e9finition compl\u00e8te, d&rsquo;o\u00f9 un plan d&rsquo;ex\u00e9cution plus complexe qu&rsquo;il n&rsquo;aurait sembl\u00e9 au premier abord.<\/p>\n<p>Mais \u00e0 l&rsquo;inverse, lorsque les colonnes s\u00e9lectionn\u00e9es et les pr\u00e9dicats de recherche n&rsquo;ont pas \u00e0 faire appel \u00e0 certaines des tables d\u00e9finissant la vue, et bien le moteur simplifie la requ\u00eate, en enlevant les tables inutiles.<\/p>\n<p><strong><a href=\"https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2012\/05\/Plan_Simplifie.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-455\" title=\"Plan_Simplifie\" src=\"https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2012\/05\/Plan_Simplifie-620x220.png\" alt=\"\" width=\"620\" height=\"220\" srcset=\"https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2012\/05\/Plan_Simplifie-620x220.png 620w, https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2012\/05\/Plan_Simplifie-300x106.png 300w, https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2012\/05\/Plan_Simplifie.png 1330w\" sizes=\"auto, (max-width: 620px) 100vw, 620px\" \/><\/a><\/strong><\/p>\n<p>D&rsquo;une mani\u00e8re g\u00e9n\u00e9rale, les vues sont donc tr\u00e8s pratiques pour simplifier et \u00e9claircir le code T-SQL d\u00e9velopp\u00e9, mais peuvent \u00eatre tr\u00e8s p\u00e9nalisantes au niveau des performances.<\/p>\n<p>Voici par exemple un usage de la vue pour un besoin non justifi\u00e9, l\u00e0 o\u00f9 le d\u00e9veloppeur aurait certainement d\u00fb privil\u00e9gier une requ\u00eate ne s&rsquo;appuyant que sur les tables elles-m\u00eames.<\/p>\n<p><a href=\"https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2012\/05\/Comparaison.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-456\" title=\"Comparaison\" src=\"https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2012\/05\/Comparaison-620x279.png\" alt=\"\" width=\"620\" height=\"279\" srcset=\"https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2012\/05\/Comparaison-620x279.png 620w, https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2012\/05\/Comparaison-300x135.png 300w, https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2012\/05\/Comparaison.png 1388w\" sizes=\"auto, (max-width: 620px) 100vw, 620px\" \/><\/a><\/p>\n<p><strong><br \/>\n<\/strong><\/p>\n<p>A noter que, pour les \u00e9ditions Entreprise de SQL Server, il est possible de d\u00e9finir des index clustered sur les vues (voir <a title=\"Cr\u00e9er des vues index\u00e9es\" href=\"https:\/\/docs.microsoft.com\/fr-fr\/sql\/relational-databases\/views\/create-indexed-views\" target=\"_blank\" rel=\"noopener noreferrer\">ici<\/a> pour plus de d\u00e9tails), mais c&rsquo;est une autre histoire&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Il est tr\u00e8s fr\u00e9quent d&rsquo;utiliser des vues pour simplifier la vie des personnes r\u00e9alisant des requ\u00eates, qu&rsquo;il s&rsquo;agisse de d\u00e9veloppeurs ou bien d&rsquo;utilisateurs avanc\u00e9s qui r\u00e9alisent des requ\u00eates applicatives. Mais beaucoup oublient que les vues sont, dans la plupart des &hellip; <a href=\"https:\/\/www.sqlserver.fr\/blog\/une-vue-nest-quun-alias\/\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-408","post","type-post","status-publish","format-standard","hentry","category-article_sql"],"_links":{"self":[{"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/posts\/408","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/comments?post=408"}],"version-history":[{"count":21,"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/posts\/408\/revisions"}],"predecessor-version":[{"id":1954,"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/posts\/408\/revisions\/1954"}],"wp:attachment":[{"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/media?parent=408"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/categories?post=408"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/tags?post=408"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}