Vous êtes sur la page 1sur 7

CENTRO DE SERVICIOS Y GESTIN EMPRESARIAL

REA DE TELEINFORMTICA
ANLISIS Y DESARROLLO DE SISTEMAS DE INFORMACIN

Versin: 1
Agosto de 2014

CONSTRUIR LA BASE DE DATOS


SENTENCIAS DDL (VISTAS E INDICES)

Pgina 1 de 7

ANTIOQUIA

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 travs de la vista no estn 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 tambin tabla virtual porque los resultados que retorna y la manera de
referenciarlas es la misma que para una tabla.
Las vistas permiten:

Ocultar informacin: Permitiendo el acceso a algunos datos y manteniendo oculto el resto de la


informacin 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 administracin de los permisos de usuario: Se pueden dar al usuario permisos para
que solamente pueda acceder a los datos a travs 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 informacin de varias tablas.

Podemos crear vistas con: un subconjunto de registros y campos de una tabla; una unin de varias
tablas; una combinacin de varias tablas; un resumen estadstico de una tabla; un subconjunto de otra
vista, combinacin de vistas y tablas.
Una vista se define usando un "SELECT".
La sintaxis bsica parcial para CREAR una vista es la siguiente:
CREATE VIEW NombreVista AS
-- SENTENCIAS SELECT
FROM Tablas;

El contenido de una vista se muestra con un " SELECT ":


SELECT * FROM NombreVista;

Recopilado y Adaptado por: Vanessa Cristina Miranda

CENTRO DE SERVICIOS Y GESTIN EMPRESARIAL


REA DE TELEINFORMTICA
ANLISIS Y DESARROLLO DE SISTEMAS DE INFORMACIN

Versin: 1
Agosto de 2014

CONSTRUIR LA BASE DE DATOS


SENTENCIAS DDL (VISTAS E INDICES)

Pgina 2 de 7

ANTIOQUIA

En el siguiente ejemplo creamos la vista "vista_empleados", que es resultado de una combinacin en la


cual se muestran 4 campos:
CREATE VIEW Vista_Empleados AS
SELECT (Apellido +' '+ E.Nombre) AS NOMBRE, Sexo, S.Nombre AS
SECCION, CantidadHijos
FROM EMPLEADOS AS E JOIN SECCIONES AS S ON CODIGO=SECCION

Para ver la informacin contenida en la vista creada anteriormente tipeamos:


SELECT * FROM Vista_Empleados;

Podemos realizar consultas a una vista como si se tratara de una tabla:


SELECT Seccion, COUNT(*) AS Cantidad FROM Vista_Empleados;

Los nombres para vistas deben seguir las mismas reglas que cualquier identificador. Para distinguir una
tabla de una vista podemos fijar una convencin 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 hubisemos
hecho aparecera un mensaje de error porque dicha expresin 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 haba un encabezado (el alias de la
concatenacin) llamado "nombre" y no pueden repetirse, si sucediera, aparecera un mensaje de error.
Otra sintaxis es la siguiente:
CREATE VIEW NombreVista (Nombres_Encabezados)
AS
-- SENTENCIAS SELECT
FROM Tablas

Creamos otra vista de "empleados" denominada "vista_empleados_ingreso" que almacena la cantidad


de empleados por ao:

Recopilado y Adaptado por: Vanessa Cristina Miranda

ANTIOQUIA

CENTRO DE SERVICIOS Y GESTIN EMPRESARIAL


REA DE TELEINFORMTICA
ANLISIS Y DESARROLLO DE SISTEMAS DE INFORMACIN

Versin: 1
Agosto de 2014

CONSTRUIR LA BASE DE DATOS


SENTENCIAS DDL (VISTAS E INDICES)

Pgina 3 de 7

CREATE VIEW Vista_Empleados_Ingreso (FECHA,CANTIDAD)


AS
SELECT DATEPART(YEAR,FechaIngreso), COUNT(*)
FROM Empleados
GROUP BY DATEPART(YEAR,FechaIngreso)

La diferencia es que se colocan entre parntesis los encabezados de las columnas que aparecern 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 habra que agregar) colocados en el "SELECT" que define la vista. Los
nombres que se colocan entre parntesis 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 es el imaginado.
Existen algunas restricciones para el uso de "CREATE VIEW", a saber:

No puede incluir las clusulas "COMPUTE" ni "COMPUTE BY" ni la palabra clave "into";

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

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 (AO,CANTIDAD)
AS
SELECT YEAR(FechaIngreso), COUNT(*)
FROM Empleados
WHERE YEAR(FechaIngreso) != '2008'

Para eliminar una vista utilizamos DROP, as:


DROP VIEW Vista_Empleados_Ingreso;

Recopilado y Adaptado por: Vanessa Cristina Miranda

ANTIOQUIA

CENTRO DE SERVICIOS Y GESTIN EMPRESARIAL


REA DE TELEINFORMTICA
ANLISIS Y DESARROLLO DE SISTEMAS DE INFORMACIN

Versin: 1
Agosto de 2014

CONSTRUIR LA BASE DE DATOS


SENTENCIAS DDL (VISTAS E INDICES)

Pgina 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 obtencin de informacin de una tabla. El ndice de una tabla
desempea la misma funcin que el ndice de un libro: permite encontrar datos rpidamente; en el caso
de las tablas, localiza registros.
Una tabla se indexa por un campo (o varios).
Un ndice posibilita el acceso directo y rpido haciendo ms eficiente las bsquedas. Sin ndice, SQL
Server debe recorrer secuencialmente toda la tabla para encontrar un registro.
El objetivo de un ndice es acelerar la recuperacin de informacin. La indexacin es una tcnica 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 disco y genera costo de mantenimiento (tiempo y recursos).
Los ndices ms adecuados son aquellos creados con campos que contienen valores nicos.
Es importante identificar el o los campos por los que sera til crear un ndice, aquellos campos por los
cuales se realizan bsqueda 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 gua telefnica, 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 bsquedas con frecuencia o se accede siguiendo
un orden.

Recopilado y Adaptado por: Vanessa Cristina Miranda

CENTRO DE SERVICIOS Y GESTIN EMPRESARIAL


REA DE TELEINFORMTICA
ANLISIS Y DESARROLLO DE SISTEMAS DE INFORMACIN

Versin: 1
Agosto de 2014

CONSTRUIR LA BASE DE DATOS


SENTENCIAS DDL (VISTAS E INDICES)

Pgina 5 de 7

ANTIOQUIA

Una tabla slo puede tener UN ndice agrupado.


El tamao medio de un ndice agrupado es aproximadamente el 5% del tamao 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 bsquedas
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 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 fsico de los registros, ordenndolos secuencialmente.
La diferencia bsica entre ndices agrupados y no agrupados es que los registros de un ndice agrupado
estn ordenados y almacenados de forma secuencial en funcin de su clave.
Resumiendo, los ndices facilitan la recuperacin de datos, permitiendo el acceso directo y acelerando
las bsquedas, consultas y otras operaciones que optimizan el rendimiento general.

CREACIN DE NDICES
Para crear ndices empleamos la instruccin "CREATE INDEX".
La sintaxis bsica es la siguiente:
CREATE TIPODEINDICE INDEX NOMBREINDICE
ON TABLA(CAMPO);

"TIPODEINDICE" indica si es agrupado (clustered) o no agrupado (nonclustered). Si no especificamos


crea uno No agrupado. Independientemente de si es agrupado o no, tambin 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 tabla "libros":
Recopilado y Adaptado por: Vanessa Cristina Miranda

ANTIOQUIA

CENTRO DE SERVICIOS Y GESTIN EMPRESARIAL


REA DE TELEINFORMTICA
ANLISIS Y DESARROLLO DE SISTEMAS DE INFORMACIN

Versin: 1
Agosto de 2014

CONSTRUIR LA BASE DE DATOS


SENTENCIAS DDL (VISTAS E INDICES)

Pgina 6 de 7

CREATE UNIQUE CLUSTERED INDEX I_libros_codigo


ON libros(codigo);

Para identificar los ndices fcilmente, 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 NONCLUSTERED INDEX I_libros_titulo
ON libros(titulo);

Un ndice puede tener ms 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 en una vista).
Creamos un ndice compuesto para el campo "autor" y "editorial":
CREATE INDEX I_libros_autoreditorial
ON libros(autor,editorial);

SQL Server crea automticamente ndices cuando se establece una restriccin "primary key" o "unique"
en una tabla. Al crear una restriccin "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 restriccin "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 SYSINDEXES;

Para ver todos los ndices de la base de datos activa creados por nosotros podemos tipear la siguiente
consulta:
SELECT NAME FROM SYSINDEXES
WHERE NAME LIKE 'I_%';

Recopilado y Adaptado por: Vanessa Cristina Miranda

CENTRO DE SERVICIOS Y GESTIN EMPRESARIAL


REA DE TELEINFORMTICA
ANLISIS Y DESARROLLO DE SISTEMAS DE INFORMACIN

Versin: 1
Agosto de 2014

CONSTRUIR LA BASE DE DATOS


SENTENCIAS DDL (VISTAS E INDICES)

Pgina 7 de 7

ANTIOQUIA

REGENERAR NDICES
Empleando la opcin "drop_existing" junto con "create index" permite regenerar un ndice, con ello
evitamos eliminarlo y volver a crearlo. La sintaxis es la siguiente:
CREATE TIPODEINDICE INDEX NOMBREINDICE
ON TABLA(CAMPO)
WITH DROP_EXISTING;

Tambin podemos modificar alguna de las caractersticas de un ndice con esta opcin, a saber:

Tipo: cambindolo 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.

Campo: se puede cambiar el campo por el cual se indexa, agregar campos, eliminar algn 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 INDEX I_libros_titulo
ON libros(titulo);

Regeneramos el ndice I_libros_titulo y lo convertimos a agrupado:


CREATE CLUSTERED INDEX I_libros_titulo
ON libros(titulo)
WITH DROP_EXISTING;

Agregamos un campo al ndice "I_libros":


CREATE CLUSTERED INDEX I_libros_titulo
ON libros(titulo, editorial)
WITH DROP_EXISTING;

NOTA: Esta opcin no puede emplearse con ndices creados a partir de una restriccin "primary key" o
"unique".
ELIMINAR NDICES
Para eliminar un ndice, utilizamos DROP, as:
DROP INDEX I_libros_titulo

Recopilado y Adaptado por: Vanessa Cristina Miranda

Vous aimerez peut-être aussi