Sei sulla pagina 1di 19

ndices

Introduccin.- Los ndices son objetos de base de datos diseados para mejorar el
rendimiento de las consultas. En este punto veremos la estructura y el propsito de
los ndices y sus tipos y caractersticas. Se ver como determinar cuando un ndice
es necesario y apropiado, que tipo de ndice usar y como crearlos. Una vez que se
crean los ndices se deben mantener para maximizar la performance de las
consultas, para ello existen varias herramientas que asisten en la tarea de
administracin y mantenimiento de los ndices. La administracin comprende las
tareas de reconstruccin, renombrado, y eliminacin de ndices.

Arquitectura de los ndices


Los ndices estn estructurados para facilitar una respuesta rpida de conjuntos de
resultados. Los dos tipos de ndices que SQL Server soporta son agrupados y no
agrupados. Los ndices son aplicados a una o ms columnas en tablas o vistas.
Tablas indexadas son soportadas por todas las ediciones de SQL Server 2005, y
vistas indexadas son soportadas por las ediciones SQL Server Entreprise y SQL
Server Developer. Las caractersticas de un ndice afecta el uso de los recursos del
sistema y performance general. El Query Optimizer usar un ndice si este mejorar
la performance de la consulta.
ndices Leccin 07
Propsito y estructura .-
Un ndice en SQL Server asiste al motor de base de datos en la ubicacin de los
registros, tal como un ndice en un libro ayuda a ubicar informacin rpidamente. Sin
ndices, una consulta deber buscar en todos los registros de la tabla en orden a
encontrar coincidencias. Un ndice de base de datos una o ms columnas de valores
de la tabla (llamadas clave del ndice) y punteros a los correspondientes registros de la
tabla. Cuando se ejecuta una consulta usando la clave del ndice, el Query Optimizer
utilizar el ndice para ubicar los registros que cumplen con la consulta.
Un ndice es estructurado por el SQL Server Index manager como un rbol
balanceado (B-tree). Un B-tree es anlogo a un rbol invertido con la raz del rbol
arriba, y los niveles hoja abajo, con niveles medios entre ambos. Cada objeto en la
estructura de rbol es un grupo de claves del ndice ordenadas llamadas pginas del
ndice.
Para un rendimiento ptimo, se crean sobre columnas que son comnmente usadas
en las consultas. Por ejemplo, los usuarios pueden consultar la tabla de Clientes en
base al apellido o al ID del cliente. Por lo tanto se deberan crear dos ndices para la
tabla: un ndice por apellido y otro por ID del cliente. Para ubicar eficientemente a los
registros, el Query Optimizer usa un ndice que concuerde con la consulta. El Query
Optimizer usar el ndice por el ID del cliente cuando se ejecute la siguiente consulta:
SELECT * FROM Clientes WHERE Cliente_ID = 798
ndices Leccin 07
Tipos de ndices .-
Hay dos tipos de ndices: agrupados (clustered) y no agrupados (non clustered).
Ambos tipos de ndices son estructuras tipo B-tree. Un ndice agrupado contiene los
registros de la tabla a nivel hoja del B-tree. Un ndice no agrupado es una estructura
de ndice separada, independiente del ordenamiento fsico de los registros en la tabla.
Si existe un ndice agrupado en un tabla, un ndice no agrupado utilizar al ndice
agrupado para la bsqueda de los registros. En la mayora de los casos se crear antes
un ndice agrupado que los ndices no agrupados sobre una tabla.

ndices agrupados :
Puede haber solo un ndice agrupado por tabla o vista, dado que estos ndices
ordenan fsicamente la tabla o vista segn la clave del ndice agrupado. Este tipo de
ndices es particularmente eficiente para consultas, dado que los registros de datos
completos (en pginas de datos) son guardados a nivel de hoja del B-tree. El
ordenamiento y la ubicacin de los datos en un ndice agrupado es anlogo al de un
diccionario donde las palabras son ordenadas en forma alfabtica y las definiciones
aparecen junto a las palabras.
ndices Leccin 07
Tipos de ndices .-

ndices agrupados :

Cuando se crea una restriccin PRIMARY KEY en un tabla que no contiene un ndice
agrupado, SQL Server crear uno y utilizar la columna de clave primaria como clave
para el ndice agrupado. Si ya existe un ndice agrupado SQL Server crear un ndice
no agrupado sobre la columna definida con una restriccin PRIMARY KEY. Una
columna definida como la clave primaria es un ndice muy til porque los valores de
la columna estn garantizados que son nicos. ndices sobre columnas de valores
nicos son de menor tamao que los ndices sobre columnas con valores duplicados y
generan estructuras de bsqueda ms eficientes.

Una columna definida con una restriccin UNIQUE genera automticamente un


ndice no agrupado.
ndices Leccin 07
Tipos de ndices .-
ndices agrupados :
Para forzar el tipo de ndice a ser creado para una columna o columnas, se puede
especificar las clusulas CLUSTERED o NONCLUSTERED en los comandos CREATE
TABLE, ALTER TABLE o CREATE INDEX. Suponga que se crea una tabla Personas
que contiene las siguientes columnas: PersonaID, Nombre, Apellido y
NumDocumento. La columna PersonID se define con la restriccin PRIMARY KEY, la
columna NumDocumento con la restriccin UNIQUE. Para hacer un ndice agrupado
para la columna NumDocumento y un ndice no agrupado para la columna PersonID,
se crea la tabla usando la siguiente sintaxis:

CREATE TABLE dbo.Personas


(
PersonID smallint PRIMARY KEY NONCLUSTERED,
Nombre varchar(39),
Apellido varchar(40),
NumDocumento char(11) UNIQUE CLUSTERED
)
ndices Leccin 07
Tipos de ndices .-

ndices agrupados :

Los ndices no se limitan a las restricciones. Se pueden crear ndices sobre cualquier
columna o combinacin de columnas en una tabla o vista. ndices agrupados
aseguran la unicidad internamente. Por lo que, si se crea un ndice agrupado sobre
columnas con valores no nicos SQL Server crea un nico valor sobre las columnas
duplicadas para servir de clave de ordenamiento secundaria. Para evitar el trabajo
adicional requerido para mantener valores nicos sobre columnas duplicadas,
generalmente se generan ndices agrupados sobre columnas con la restriccin
PRIMARY KEY.
ndices Leccin 07
Tipos de ndices .-

ndices no agrupados :

Sobre una tabla o vista se pueden crear 250 ndice no agrupados o 249 ndices no agrupados y un
ndice agrupado. Se debe primero crear un ndice nico agrupado sobre una vista previo a crear
los ndices no agrupados. Esta restriccin no se aplica a las tablas. Un ndice no agrupado es
anlogo a un ndice al final de un libro. Se puede usar el ndice del libro para ubicar las pginas
que contienen una tema del ndice del libro. La base de datos usa los ndices no agrupados para
encontrar registros segn una clave.
Si no existe un ndices agrupado para la tabla, los datos de la tabla se encontrarn desordenados
fsicamente y se dice que la tabla tendr la estructura de montn (heap). Un ndice no agrupado
sobre una tabla montn contiene punteros a las filas de la tabla. Cada entrada en las pginas de
ndice contiene un identificador de fila (RID, row ID). El RID es un puntero a una fila en un
montn, y este consiste de un nmero de pgina, un nmero de archivo y un nmero de ranura.
Si existe un ndice agrupado, las pginas de un ndice no agrupado contienen las claves del
ndice agrupado en vez del RID.
ndices Leccin 07
Obtener Informacin Almacenada (DML) .-

Bsquedas Sencillas (Ejemplos)

Obtener el contenido de la tabla Articulos.


SELECT* FROM Articulos

Listar el nombre y el telfono de todos los Proveedores.

SELECT nombrpro as Nombre, telefpro as Telf


FROM Proveedores
ndices Leccin 07
Obtener Informacin Almacenada (DML) .-

Bsquedas Cualificadas. Cond. de Comparacin 1


(Ejemplos)

Las condiciones de comparacin son expresiones lgicas que permiten


comparar una columna o expresin con otra columna, expresin o lista de
columnas. Pueden adoptar una de las formas siguientes:
exp operador_de_comparacin exp exp
[NOT] BETWEEN exp AND exp exp
[NOT] IN (lista de valores)
campo [NOT] LIKE 'cadena_de_caracteres'
campo IS [NOT] NULL

Encontrar los artculos cuyo precio unitario sea superior a 180 y su stock sea
inferior o igual a 100.
SELECT * FROM Articulos
WHERE preunart > 180 AND stockart <= 100
ndices Leccin 07
Obtener Informacin Almacenada (DML) .-

Bsquedas Cualificadas. Cond. de Comparacin 2


(Ejemplos)

Listar los artculos cuyo precio unitario est comprendido entre 180 y 300.

SELECT * FROM Articulos


WHERE preunart BETWEEN 180 AND 300

Hallar todos los proveedores de las ciudades de Santander, Madrid y Barcelona.


SELECT codigpro, nombrpro, direcpro, cpostpro, localpro FROM Proveedores WHERE
localpro IN ('Santander', 'Madrid', 'Barcelona')
ndices Leccin 07
Obtener Informacin Almacenada (DML) .-

Bsquedas Cualificadas. Cond. de Comparacin 3


(Ejemplos)

Encontrar todos los proveedores cuyo primer apellido comience por


una letra comprendida entre la A y la J.

SELECT codigpro, nombrpro, direcpro, cpostpro, localpro FROM Proveedores WHERE


nombrpro LIKE '[A-J]%'

Hallar todos los proveedores de los que no se tenga informacin sobre su


correo electrnico.
SELECT codigpro, nombrpro, direcpro, cpostpro, localpro, telefpro FROM
Proveedores
WHERE emailpro IS NULL
ndices Leccin 07
Obtener Informacin Almacenada (DML) .-

Bsquedas Cualificadas. Cond. de Combinacin


Combinacin Simple (Ejemplo)

Las bsquedas cualificadas son las que afectan a datos de ms de una tabla.

Una Combinacin Simple es aquella en la que la condicin de la clusula FROM (o


WHERE) contiene una comparacin de igualdad entre campos pertenecientes a dos
tablas distintas.

Listar todos los proveedores a los que se ha efectuado algn pedido entre el
20/1/2006 y el 15/9/2006.

SELECT DISTINCT Proveedores.codigpro, nombrpro, direcpro, localpro FROM


Proveedores INNER JOIN Pedidos
ON Proveedores.codigpro = Pedidos.codigpro WHERE
fechaped BETWEEN '2006/01/20' AND '2006/09/15'
ndices Leccin 07
Obtener Informacin Almacenada (DML) .-

Bsquedas Cualificadas. Cond. de Combinacin


Combinacin Simple (Ejemplo. Continuacin)

SELECT DISTINCT Proveedores.codigpro, nombrpro, direcpro, localpro


FROM Proveedores INNER JOIN Pedidos
ON Proveedores.codigpro = Pedidos.codigpro WHERE
fechaped BETWEEN '2006/01/20' AND '2006/09/15'

Informaci
de proceso
ndices Leccin 07
Obtener Informacin Almacenada (DML) .-

Bsquedas Cualificadas. Cond. de Combinacin


Combinacin Mltiple (Ejemplo)

Una Combinacin Mltiple es aquella


combinacin que relaciona varios
campos de ms de dos tablas.

Encontrar todos los artculos que han sido pedidos entre el 15/5/2006 y el 30/5/2006.
SELECT DISTINCT Articulos.codigart, descrart
FROM Pedidos INNER JOIN
(Lineas INNER JOIN Articulos ON Lineas.codigart = Articulos.codigart) ON
Pedidos.numped = Lineas.numped

WHERE fechaped BETWEEN '2006/05/15' AND '2006/05/30'


ndices Leccin 07
Obtener Informacin Almacenada (DML) .-

Funciones de grupo (Ejemplo)


COUNT(*) N de filas que componen
el grupo.
Con las filas de la informacin de
COUNT(campo) N de filas con valor
proceso correspondiente a una asignado al campo (nulos
instruccin SELECT se pueden no cuentan).
establecer grupos. SUM(exp) Suma de valores obtenidos
En cada uno de estos grupos, con la expresin en cada
mediante las funciones de grupo, se fila.
pueden efectuar ciertos clculos. AVG(exp) Media.
MAX(exp) Mximo.
Encontrar cuntos artculos hay MIN(exp) Mnimo.
registrados, el mximo y el mnimo STDEV(exp) Desviacin tpica.
precio unitario, el precio unitario VAR(exp) Varianza.
medio y la valoracin del almacn.
SELECT COUNT(codigart) AS Cantidad, MAX(preunart) AS Max,
MIN(preunart) AS Min, AVG(preunart) AS Precio_medio,
SUM(preunart*stockart) AS Valoracin
FROM Articulos
ndices Leccin 07
Obtener Informacin Almacenada (DML) .-

Funciones de fecha (Ejemplo)


DAY(fecha) Devuelve el da de mes de
fecha.
Los datos de tipo fecha son MONTH (fecha) Devuelve el mes de fecha.
almacenados como una unidad de YEAR (fecha) Devuelve el ao de fecha.
informacin. Cuando se necesita DATEPART(dw,fecha) Devuelve el da de la
trabajar con componentes de una semana correspondiente
a fecha (el 1 domingo,
fecha, es preciso utilizar funciones
el 2 lunes, ...).
de fecha.
Listar da, mes y ao de cada pedido, as como el da de la semana al que corresponden sus
fechas.

SELECT numped, fechaped,


DAY(fechaped) as dia_mes, MONTH(fechaped) as mes,
YEAR(fechaped) as ao, DATEPART(dw,fechaped) as dia_sem FROM
Pedidos
ndices Leccin 07
Obtener Informacin Almacenada (DML) .-

Agrupamiento de datos (Ejemplo)

La clusula GROUP permite formar grupos con las filas de datos que tengan valores
iguales para determinados campos.

La respuesta tiene tantas filas como grupos haya establecido la instruccin.

Obtener el importe de cada pedido sin aplicar el IVA.

SELECT numped, SUM((preunlin*unilin)*(1-desculin/100)) as Importe


FROM Lineas
GROUP BY numped
ndices Leccin 07
Obtener Informacin Almacenada (DML) .-

Agrupamiento de Datos. Cond. de agrupamiento


(Ejemplo)

Listar el importe, sin aplicar el IVA, de los pedidos que tienen ms de una lnea.

SELECT numped, SUM((preunlin*unilin)*(1-desculin/100)) as Importe


FROM Lineas
GROUP BY numped
HAVING COUNT(*) > 1
ndices Leccin 07
Obtener Informacin Almacenada (DML) .-

Ordenacin del Resultado (Ejemplo)

[ORDER BY colum1 { [ASC] | DESC } [, colum2 { [ASC] | DESC }, .... ] ]

colum1, colum2, ...: son nombres de elementos (campos, expresiones o


funciones) de la lista de seleccin o la posicin que ocupan en ella.
ASC: quiere decir ordenacin ascendente (opcin por defecto) y DESC
descendente.

Listar los valores de los campos que componen el ndice de unicidad de la tabla Lineas
(numped, numlin), por orden decreciente de n de pedido y de n de lnea.

SELECT numped, numlin

FROM Lineas

ORDER BY 1 DESC, 2 DESC

Potrebbero piacerti anche