304
Chapitre 9. Optimisation des procédures stockées
SET CONCAT_NULL_YIELDS_NULL ON
GO
SELECT TOP 10 FirstName + ' ' + MiddleName + ' ' + LastName
FROM Person.Contact
GO
SET CONCAT_NULL_YIELDS_NULL OFF
GO
SELECT TOP 10 FirstName + ' ' + MiddleName + ' ' + LastName
FROM Person.Contact
GO
Ou, imaginons que nous avons deux utilisateurs, Paul et Isabelle, qui sont déclarés dans la base avec deux schémas par défaut différents (par exemple Person et
HumanResources). S’ils exécutent tous deux un code identique, qui ne référence pas
le schéma de l’objet, un plan d’exécution différent doit être généré, même si l’objet
qui sera touché est le même, simplement parce que SQL Server ne sait pas à l’avance
quel va être le bon objet. En vertu du mécanisme de résolution de nom, un objet
appartenant au schéma par défaut sera d’abord recherché, et s’il n’est pas trouvé,
SQL Server cherchera un objet appartenant au schéma dbo. Exemple :
CREATE TABLE dbo.test (TestId int)
GO
ALTER USER isabelle WITH DEFAULT_SCHEMA = Person
ALTER USER paul WITH DEFAULT_SCHEMA = HumanResources
GO
CREATE TABLE dbo.test (TestId int)
GO
GRANT SELECT ON dbo.test TO paul
GRANT SELECT ON dbo.test TO isabelle
GO
EXECUTE AS USER = 'paul'
SELECT CURRENT_USER
GO
SELECT * FROM test
GO
REVERT
GO
EXECUTE AS USER = 'isabelle'
SELECT CURRENT_USER
GO
SELECT * FROM test
GO
REVERT
GO
Combien avons-nous de plans ? Vous trouverez sur la figure 9.4 le résultat de la
requête
SELECT st.text, qs.sql_handle, qs.plan_handle
FROM sys.dm_exec_query_stats qs
Précédent

- 316/334

Suivant