Vistas e Indices SQL Server

November 15, 2022 | Author: Anonymous | Category: N/A
Share Embed Donate


Short Description

Download Vistas e Indices SQL Server...

Description

 

 

CENTRO DE SERVICIOS Y GESTIÓN EMPRESARIAL  ÁREA DE TELEINFORMÁTICA  ANÁLISIS Y DESARROLLO DE SISTEMAS DE INFORMACIÓN INFORMACIÓN

 ANTIOQUIA

Versión: 1  Agosto de 2014

CONSTRUIR LA BASE DE DATOS SENTENCIAS DDL (VISTAS E INDICES)

Página 1 de 7

VISTAS E ÍNDICES VISTAS Una vista es una alternativa para mostrar datos de varias tablas. Una vista es como una tabla virtual que almacena una consulta. Los datos accesibles a través de la vista no están almacenados en la base de datos como un objeto. Entonces, una vista almacena una consulta como un objeto para utilizarse posteriormente. Las tablas consultadas en una vista se llaman tablas base. En general, se puede dar un nombre a cualquier consulta y almacenarla como una vista. Una vista suele llamarse también tabla virtual porque los resultados que retorna y la manera de referenciarlas es la misma que para una tabla. Las vistas permiten:

  Ocultar información: Permitiendo el acceso a algunos datos y manteniendo oculto el resto de la



información que no se incluye en la vista. El usuario opera con los datos de una vista como si se tratara de una tabla, pudiendo modificar tales datos.

  Simplificar la administración de los permisos de usuario: Se pueden dar al usuario permisos para



que solamente pueda acceder a los datos a través de vistas, en lugar de concederle permisos para acceder a ciertos campos, así se protegen las tablas base de cambios en su estructura.

  Mejorar el rendimiento: Se puede evitar tipear instrucciones repetidamente almacenando en



una vista el resultado de una consulta compleja que incluya información de varias tablas. Podemos crear vistas con: un subconjunto de registros y campos de una tabla; una unión de varias tablas; una combinación de varias tablas; un resumen estadístico de una tabla; un subconjunto de otra vista, combinación de vistas y tablas. Una vista se define usando un "SELECT". La sintaxis básica parcial para CREAR una vista es la siguiente: CREATE   VIEW VIEW NombreVista  NombreVista AS CREATE -- SENTENCIAS SELECT FROM Tablas FROM  Tablas; ;

El contenido de una vista se muestra con c on un " SELECT ": SELECT  FROM NombreVista  NombreVista; ; SELECT * FROM

Recopilado y Adaptado por: Vanessa Cristina Miranda

 

 

CENTRO DE SERVICIOS Y GESTIÓN EMPRESARIAL  ÁREA DE TELEINFORMÁTICA  ANÁLISIS Y DESARROLLO DE SISTEMAS DE INFORMACIÓN INFORMACIÓN

 ANTIOQUIA

Versión: 1  Agosto de 2014

CONSTRUIR LA BASE DE DATOS SENTENCIAS DDL (VISTAS E INDICES)

Página 2 de 7

En el siguiente ejemplo creamos la vista "vista_empleados", que es resultado de una combinación en la cual se muestran 4 campos: CREATE   VIEW VIEW Vista_Empleados  Vista_Empleados AS CREATE SELECT (Apellido +' '+ '+ E.  E.Nombre Nombre) ) AS AS NOMBRE  NOMBRE, , Sexo  Sexo, , S.  S.Nombre AS AS    , CantidadHijos SECCION, SECCION FROM FROM EMPLEADOS  EMPLEADOS AS AS E  E JOIN SECCIONES JOIN SECCIONES AS S AS S ON CODIGO ON CODIGO= =SECCION SECCION  

Para ver la información contenida en la vista creada c reada anteriormente tipeamos: SELECT  FROM Vista_Empleados  Vista_Empleados; ; SELECT * FROM

Podemos realizar consultas a una vista como si se tratara de una tabla: SELECT Seccion  Seccion, , COUNT COUNT(*) (*)   AS Cantidad AS Cantidad FROM Vista_Empleados FROM Vista_Empleados; ;  SELECT

Los nombres para vistas deben seguir las mismas reglas que cualquier identificador. Para distinguir una tabla de una vista podemos fijar una convención para darle nombres, por ejemplo, colocar el sufijo “vista” y luego el nombre de las tablas consultadas en ellas.   Los campos y expresiones de la consulta que define una vista DEBEN tener un nombre. Se debe colocar nombre de campo cuando es un campo calculado o si hay 2 campos con el mismo nombre. Note que en el ejemplo, al concatenar los campos "apellido" y "nombre" colocamos un alias; si no lo hubiésemos hecho aparecería un mensaje de error porque dicha expresión DEBE tener un encabezado, SQL Server no lo coloca por defecto. Los nombres de los campos y expresiones de la consulta que define una vista DEBEN ser únicos (no puede haber dos campos o encabezados con igual nombre). Note que en la vista definida en el ejemplo, al campo "s.Nombre" le colocamos un alias porque ya había un encabezado (el alias de la concatenación) llamado "nombre" y no pueden repetirse, si sucediera, aparecería un mensaje de error. Otra sintaxis es la siguiente: CREATE CREATE   VIEW VIEW NombreVista  NombreVista (Nombres_Encabezados) AS -- SENTENCIAS SELECT FROM Tablas FROM  Tablas

Creamos otra vista de "empleados" denominada "vista_empleados_ingreso" que almacena la cantidad de empleados por año:

Recopilado y Adaptado por: Vanessa Cristina Miranda

 

   ANTIOQUIA

CENTRO DE SERVICIOS Y GESTIÓN EMPRESARIAL  ÁREA DE TELEINFORMÁTICA  ANÁLISIS Y DESARROLLO DE SISTEMAS DE INFORMACIÓN INFORMACIÓN

Versión: 1  Agosto de 2014

CONSTRUIR LA BASE DE DATOS SENTENCIAS DDL (VISTAS E INDICES)

Página 3 de 7

CREATE CREATE   VIEW VIEW Vista_Empleados_Ingreso  Vista_Empleados_Ingreso   (FECHA FECHA, ,CANTIDAD CANTIDAD) ) AS SELECT DATEPART SELECT  DATEPART( (YEAR YEAR, ,FechaIngreso FechaIngreso), ),   COUNT COUNT(*) (*) FROM Empleados FROM  Empleados GROUP GROUP   BY  BY DATEPART( DATEPART(YEAR YEAR, ,FechaIngreso FechaIngreso) )  La diferencia es que se colocan entre paréntesis los encabezados de las columnas que aparecerán en la vista. Si no los colocamos y empleamos la sintaxis vista anteriormente, se emplean los nombres de los campos o alias (que en este caso habría que agregar) colocados en el "SELECT" que define la vista. Los nombres que se colocan entre paréntesis deben ser tantos como los campos o expresiones que se definen en la vista. Las vistas se crean en la base de datos activa. Al crear una vista, SQL Server verifica que existan las tablas a las que se hacen referencia en ella. Se aconseja probar la sentencia "SELECT" con la cual definiremos la vista antes de crearla para asegurarnos que el resultado que retorna ret orna es el imaginado. Existen algunas restricciones para el uso de "CREATE VIEW", a saber:

  No puede incluir las cláusulas "COMPUTE" ni "COMPUTE BY" ni la palabra clave "into";



c rear vistas sobre tablas temporales.   No se pueden crear vistas temporales ni crear



  No se pueden asociar reglas ni valores por defecto a las vistas.



  No puede combinarse con otras instrucciones en un mismo lote.



Para modificar una vista utilizamos ALTER, así: ALTER  VIEW Vista_Empleados_Ingreso   (AÑO AÑO, ,CANTIDAD CANTIDAD) ) ALTER VIEW Vista_Empleados_Ingreso AS SELECT  SELECT  YEAR YEAR(FechaIngreso (FechaIngreso), ),   COUNT COUNT(*) (*) FROM Empleados FROM  Empleados WHERE YEAR YEAR(FechaIngreso (FechaIngreso) ) != '2008' '2008'  

Para eliminar una vista utilizamos DROP, así: VIEW Vista_Empleados_Ingreso  Vista_Empleados_Ingreso; ; DROP VIEW

Recopilado y Adaptado por: Vanessa Cristina Miranda

 

   ANTIOQUIA

CENTRO DE SERVICIOS Y GESTIÓN EMPRESARIAL  ÁREA DE TELEINFORMÁTICA  ANÁLISIS Y DESARROLLO DE SISTEMAS DE INFORMACIÓN INFORMACIÓN

Versión: 1  Agosto de 2014

CONSTRUIR LA BASE DE DATOS SENTENCIAS DDL (VISTAS E INDICES)

Página 4 de 7

ÍNDICES SQL Server accede a los datos de dos maneras:

  Recorriendo las tablas; comenzando en el principio y extrayendo los registros que cumplen las



 



condiciones de la consulta. Empleando índices; recorriendo la estructura de árbol del índice para localizar los registros y extrayendo los que cumplen las condiciones de la consulta.

Los índices se emplean para facilitar la obtención de información de una tabla. El índice de una tabla desempeña la misma función que el índice de un libro: permite encontrar datos rápidamente; en el caso de las tablas, localiza registros. Una tabla se indexa por un campo cam po (o varios). Un índice posibilita el acceso directo y rápido haciendo más eficiente las búsquedas. Sin índice, SQL Server debe recorrer secuencialmente toda la tabla para encontrar un registro. El objetivo de un índice es acelerar la recuperación de información. La indexación es una técnica que optimiza el acceso a los datos, mejora el rendimiento acelerando las consultas y otras operaciones. Es útil cuando la tabla contiene miles de registros, cuando se realizan operaciones de ordenamiento y agrupamiento y cuando se combinan varias tablas. La desventaja es que consume espacio en e n disco y genera costo de mantenimiento (tiempo y recursos).  Los índices más adecuados son aquellos creados con campos que contienen valores únicos. Es importante identificar el o los campos por los que sería útil crear un índice, aquellos campos por los cuales se realizan búsqueda con frecuencia: claves primarias, claves externas o campos que combinan tablas. No se recomienda crear índices por campos que no se usan con frecuencia en consultas o no contienen valores únicos. SQL Server permite crear dos tipos de índices: 1) agrupados (clustered) y 2) no agrupados (nonclustered). 

1)  Un ÍNDICE AGRUPADO  es similar a una guía telefónica, los registros con el mismo valor de campo se agrupan juntos. Un índice agrupado determina la secuencia de almacenamiento de los registros en una tabla. Se utilizan para campos por los que se realizan búsquedas con frecuencia o se accede siguiendo un orden.

Recopilado y Adaptado por: Vanessa Cristina Miranda

 

 

CENTRO DE SERVICIOS Y GESTIÓN EMPRESARIAL  ÁREA DE TELEINFORMÁTICA  ANÁLISIS Y DESARROLLO DE SISTEMAS DE INFORMACIÓN INFORMACIÓN

 ANTIOQUIA

Versión: 1  Agosto de 2014

CONSTRUIR LA BASE DE DATOS SENTENCIAS DDL (VISTAS E INDICES)

Página 5 de 7

Una tabla sólo puede tener UN índice agrupado. agr upado. El tamaño medio de un índice agrupado es aproximadamente el 5% del tamaño de la tabla.

2)  Un ÍNDICE NO AGRUPADO  es como el índice de un libro, los datos se almacenan en un lugar diferente al del índice, los punteros indican el lugar de almacenamiento de los elementos indizados en la tabla. Un índice no agrupado se emplea cuando se realizan distintos tipos de búsquedas frecuentemente, con campos en los que los datos son únicos. Una tabla puede tener hasta 249 índices no agrupados.

Si no se especifica un tipo t ipo de índice, de modo predeterminado será no agrupado. Los campos de tipo text, ntext e image no se pueden indizar. Es recomendable crear los índices agrupados antes que los no agrupados, porque los primeros modifican el orden físico de los registros, ordenándolos or denándolos secuencialmente. La diferencia básica entre índices agrupados y no agrupados es que los registros de un índice agrupado están ordenados y almacenados de forma secuencial en función de su clave. Resumiendo, los índices facilitan la recuperación de datos, permitiendo el acceso directo y acelerando las búsquedas, consultas y otras operaciones que optimizan el rendimiento general.

CREACIÓN DE ÍNDICES Para crear índices empleamos la instrucción "CREATE INDEX". La sintaxis básica es la siguiente: CREATE TIPODEINDICE INDEX CREATE TIPODEINDICE INDEX NOMBREINDICE  NOMBREINDICE ON TABLA  TABLA( (CAMPO CAMPO); ); ON "TIPODEINDICE" indica si es agrupado (clustered) o no agrupado (nonclustered). Si no especificamos crea uno No agrupado. Independientemente de si es agrupado o no, también se puede especificar que sea "unique", es decir, no haya valores repetidos. Si se intenta crear un índice unique para un campo que tiene valores duplicados, SQL Server no lo permite. En este ejemplo se crea un índice agrupado único para el campo "codigo" de la ttabla abla "libros":

Recopilado y Adaptado por: Vanessa Cristina Miranda

 

   ANTIOQUIA

CENTRO DE SERVICIOS Y GESTIÓN EMPRESARIAL  ÁREA DE TELEINFORMÁTICA  ANÁLISIS Y DESARROLLO DE SISTEMAS DE INFORMACIÓN INFORMACIÓN

Versión: 1  Agosto de 2014

CONSTRUIR LA BASE DE DATOS SENTENCIAS DDL (VISTAS E INDICES)

Página 6 de 7

CREATE CREATE   UNIQUE UNIQUE   CLUSTERED CLUSTERED   INDEX INDEX I_libros_codigo  I_libros_codigo ON libros  libros( (codigo codigo); );   ON

Para identificar los índices fácilmente, podemos agregar un prefijo al nombre del índice, por ejemplo "I" y luego el nombre de la tabla y/o campo. En este ejemplo se crea un índice no agrupado para el campo "titulo" de la tabla "libros": CREATE CREATE   NONCLUSTERED NONCLUSTERED   INDEX I_libros_titulo INDEX I_libros_titulo ON libros( ON libros (titulo titulo); );

Un índice puede tener más de un campo como clave, son Índices Compuestos. Los campos de un índice compuesto tienen que ser de la misma tabla (excepto cuando se crea e en n una vista). Creamos un índice compuesto para el campo " autor " y "editorial ": ": CREATE INDEX I_libros_autoreditorial CREATE  INDEX I_libros_autoreditorial ON libros (autor autor, ,editorial editorial); );   ON libros(

SQL Server crea automáticamente índices cuando se establece una restricción " primary key " o "unique" en una tabla. Al crear una restricción " primary key ", ", si no se especifica, el índice será agrupado (clustered) a menos que ya exista un índice agrupado para dicha tabla. Al crear una restricción "unique", si no se especifica, el índice será no agrupado (non-clustered). Ahora podemos entender el resultado del procedimiento almacenado "sp_helpconstraint " cuando en la columna "constraint_type" mostraba el tipo de índice seguido de las palabras "clustered" o "non_clustered". Todos los índices de la base de datos activa se almacenan en la tabla del sistema "sysindexes", podemos consultar dicha tabla tipeando: SELECT NAME FROM SELECT NAME FROM   SYSINDEXES; SYSINDEXES ; Para ver todos los índices de la base de datos activa creados por nosotros podemos tipear la siguiente consulta: SELECT SELECT NAME  NAME FROM FROM   SYSINDEXES WHERE NAME WHERE  NAME LIKE LIKE   'I_%' 'I_%'; ;

Recopilado y Adaptado por: Vanessa Cristina Miranda

 

 

CENTRO DE SERVICIOS Y GESTIÓN EMPRESARIAL  ÁREA DE TELEINFORMÁTICA  ANÁLISIS Y DESARROLLO DE SISTEMAS DE INFORMACIÓN INFORMACIÓN

 ANTIOQUIA

Versión: 1  Agosto de 2014

CONSTRUIR LA BASE DE DATOS SENTENCIAS DDL (VISTAS E INDICES)

Página 7 de 7

REGENERAR ÍNDICES Empleando la opción "drop_existing" junto con "create index" permite regenerar un índice, con ello evitamos eliminarlo y volver a crearlo. La sintaxis es la siguiente: CREATE CREATE TIPODEINDICE  TIPODEINDICE INDEX INDEX NOMBREINDICE  NOMBREINDICE ON TABLA  TABLA( (CAMPO CAMPO) ) ON WITH  WITH  DROP_EXISTING; DROP_EXISTING ;  También podemos modificar alguna de las características de un índice con esta opción, a saber:

  Tipo: cambiándolo de no agrupado a agrupado (siempre que no exista uno agrupado para la



misma tabla). No se puede convertir un índice agrupado en No agrupado. ag rupado.

  Campo: se puede cambiar el campo por el cual se indexa, agregar campos, eliminar algún campo



de un índice compuesto.

  Único: se puede modificar un índice para que los valores sean únicos o dejen de serlo.



Retomaremos el ejemplo anterior donde se crea un índice no agrupado para el campo "titulo" de la tabla "libros": CREATE NONCLUSTERED CREATE  NONCLUSTERED   INDEX I_libros_titulo INDEX I_libros_titulo ON libros  libros( (titulo titulo); ); ON Regeneramos el índice I_libros_titulo I_libros_titulo   y lo convertimos a agrupado: CREATE CREATE   CLUSTERED CLUSTERED   INDEX I_libros_titulo INDEX I_libros_titulo ON ON libros  libros( (titulo titulo) ) WITH  WITH  DROP_EXISTING; DROP_EXISTING ;  Agregamos un campo al índice "I_libros": CREATE CREATE   CLUSTERED CLUSTERED   INDEX I_libros_titulo INDEX I_libros_titulo ON libros  libros( (titulo, editorial) editorial) ON WITH  WITH  DROP_EXISTING; DROP_EXISTING ;  NOTA: Esta opción no puede emplearse con índices creados a partir de una restricción "primary key" o "unique".

ELIMINAR ÍNDICES Para eliminar un índice, utilizamos DROP, así: INDEX I_libros_titulo  I_libros_titulo  DROP INDEX

Recopilado y Adaptado por: Vanessa Cristina Miranda

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF