2011-03-28 3 views
1

Je voulais créer une vue, qui exposera la même propriété que la table il interroge deCréer une vue avec des index

CREATE VIEW Agent_View 
AS 
SELECT * FROM Agent_table 

Je veux savoir si je dois créer les mêmes indices que le Agent_table dans le Agent_View également.

Ai-je besoin de déclarer le Agent_View comme schemabound pour créer un index. Est-il possible de créer des index sans déclarer comme schemabound?

+0

Je ne pense pas que vous ayez besoin de créer des index sur la vue. Les index de la table seront utilisés. –

Répondre

3

Vous ne pouvez pas créer des index sur la vue avec SELECT * parce que vous ne pouvez pas avoir WITH SCHEMABINDING

Une vue sans index est juste une macro qui se développe dans la requête externe de toute façon. Les index de table seront donc utilisés de toute façon. La vue n'existe pas dans une perspective de schéma. Enfin, à mon humble avis, c'est peut-être l'utilisation la plus inutile d'une vue possible. Il ajoute valeur zéro.

1

Vous pouvez créer des vues indexées si vous avez des requêtes complexes, mais dans votre cas, les index de la table seront utilisés.

MSDN reference

2

La plupart (sinon toutes) les requêtes par rapport à cette vue se comporteront comme si vous utilisiez la table de sous-couche directement.

Ainsi, si vous indexé agent_name dans agent_table, et effectué une requête comme:

select * 
    from agent_view 
where agent_name = 'James Bond'; 

... il serait réécrite par l'optimiseur à:

select * 
    from agent_table 
where agent_name = 'James Bond'; 

Que l'indice sera utilisé ou non est une autre question.

Questions connexes