tabla - tipos de indices en sql
¿Por qué querrías poner un índice en una vista? (4)
Microsoft SQL Server le permite agregar un índice a una vista, pero ¿por qué le gustaría hacer esto?
Para acelerar las consultas.
Tengo entendido que una vista es solo una subconsulta, es decir, si digo SELECT * FROM myView, realmente estoy diciendo SELECT * FROM (myView''s Query)
No siempre.
Al crear un índice agrupado en una vista, materializas la vista y las actualizaciones de las tablas subyacentes actualizan físicamente la vista. Las consultas en contra de esta vista pueden o no tener acceso a las tablas subyacentes.
No todas las vistas pueden ser indexadas.
Por ejemplo, si usa GROUP BY
en una vista, para que sea indexable, debe contener COUNT_BIG
y todas las funciones agregadas en él deben distribuirse en UNION ALL
(solo SUM
y COUNT_BIG
realidad son). Esto es necesario para que el índice sea mantenible y la actualización de las tablas subyacentes podría actualizar la vista de manera oportuna.
Microsoft SQL Server le permite agregar un índice a una vista, pero ¿por qué le gustaría hacer esto?
Tengo entendido que una vista es solo una subconsulta, es decir, si digo SELECT * FROM myView, realmente estoy diciendo SELECT * FROM (myView''s Query)
Parece que los índices en las tablas subyacentes serían los más importantes. Entonces, ¿por qué quieres un índice separado en la vista?
Si la vista está indexada, cualquier consulta que pueda responderse usando el índice nunca necesitará referirse a las tablas subyacentes. Esto puede conducir a una enorme mejora en el rendimiento.
Esencialmente, el motor de la base de datos mantiene una versión "resuelta" de la consulta (o, más bien, el índice de la consulta) a medida que actualiza las tablas subyacentes, luego usa esa versión resuelta en lugar de las tablas originales cuando es posible.
Aquí hay un buen article en Database Journal.
Usted crea un índice en una vista por el mismo motivo que en una tabla base: para mejorar el rendimiento de las consultas en esa vista. Otra razón para hacerlo es implementar alguna restricción de exclusividad que no pueda implementar contra las tablas base. Desafortunadamente, SQL Server no permite que se creen restricciones en las vistas.
el siguiente enlace proporciona una mejor información redactada de la que puedo decir, especialmente en la sección bajo aumentos de rendimiento. Espero eso ayude