You are on page 1of 8

Creacin y mantenimiento de ndices

Prctica B: Vista de las estadsticas de los ndices


Objetivos
Despus de realizar esta prctica, el alumno ser capaz de:

Prever la densidad y determinar la selectividad de los ndices. Ver las estadsticas de los ndices para determinar si son selectivos.

Requisitos previos

El archivo lab075.zip contiene los archivos de comandos necesarios para la realizacin de la prctica, as como las correspondientes soluciones. Para la realizacin de las prcticas es necesario ejecutar el script Restore.cmd del directorio Restore.

Creacin y mantenimiento de ndices

Ejercicio 1 Examen del uso de ndices


En este ejercicio crear ndices, ejecutar una serie de instrucciones SELECT para examinar la densidad de cuatro columnas de la tabla Charge y determinar la selectividad. Puede abrir, revisar y ejecutar secciones del archivo de comandos ExamUse.sql o bien ejecutar las instrucciones de Transact-SQL proporcionadas.

Para crear ndices


En este procedimiento va a eliminar ndices existentes de la tabla Charge y a crear ndices no agrupados. 1. Abra el Analizador de consultas SQL y, si as se le pide, conctese con el sesin en el servidor local con autenticacin de Microsoft Windows. 2. Escriba y ejecute esta instruccin para crear ndices no agrupados nicos con las columnas charge_no, member_no, provider_no y category_no de la tabla charge:
USE credit CREATE UNIQUE NONCLUSTERED INDEX charge_no_CL ON charge (charge_no) CREATE NONCLUSTERED INDEX indx_member_no ON charge (member_no) CREATE NONCLUSTERED INDEX indx_provider_no ON charge (provider_no) CREATE NONCLUSTERED INDEX indx_category_no ON charge (category_no) GO

Creacin y mantenimiento de ndices

Para revisar la estructura de la tabla Charge


En este procedimiento va a crear ndices con la tabla Charge y determinar los valores mnimo y mximo de las columnas indizadas. 1. Escriba o seleccione estas instrucciones y ejectelas para obtener los valores mnimo y mximo de las columnas charge_no, member_no, provider_no y category_no:
SELECT 'Charge_No ', MIN(Charge_No) AS 'Minimum Value', MAX(Charge_No) AS 'Maximum Value' FROM charge UNION SELECT 'Member_No ', MIN(Member_No) AS 'Minimum Value', MAX(Member_No) AS 'Maximum Value' FROM charge UNION SELECT 'Provider_No ', MIN(Provider_No) AS 'Minimum Value', MAX(Provider_No) AS 'Maximum Value' FROM charge UNION SELECT 'Category_No ', MIN(Category_No) AS 'Minimum Value', MAX(Category_No) AS 'Maximum Value' FROM charge GO

2. Registre la informacin de la siguiente tabla.


Valor Mn. Mx. charge_no 1 100,000 member_no 41 10,000 provider_no 18 500 category_no 1 10

Para determinar la selectividad


En este procedimiento va a ejecutar una serie de instrucciones SELECT que seleccionarn todas las filas de la tabla Charge. Por cada instruccin SELECT se realiza un recorrido de tabla; primero seleccionar la consulta y, luego, ver el plan de ejecucin previsto. Modificar la clusula WHERE para que el optimizador de consultas utilice un ndice al recuperar las filas y, a continuacin, ejecutar esa consulta. Despus de ejecutar la consulta, registrar y evaluar el nmero mximo de filas que se pueden devolver con un ndice.
USE credit SELECT * FROM charge WHERE charge_no BETWEEN 1 AND 100000 USE credit SELECT * FROM charge WHERE member_no BETWEEN 1 AND 10000 USE credit SELECT * FROM charge WHERE provider_no BETWEEN 1 AND 500 USE credit SELECT * FROM charge WHERE category_no between 1 AND 10

Creacin y mantenimiento de ndices

1. Seleccione la primera instruccin, pero no la ejecute. 2. En la ventana de consulta, en el men Consulta haga clic en Mostrar el plan de ejecucin estimado. Observe el plan de consulta de la instruccin. 3. Modifique el intervalo de las instrucciones SELECT para que el optimizador de consultas utilice un ndice para recuperar las filas, en lugar de un recorrido de tabla o un recorrido de ndice completo. Al elegir un intervalo, recuerde que: Cada pgina tiene aproximadamente 172 cargos. Los miembros y los proveedores ms antiguos son menos activos que los nuevos. Todas las categoras son igualmente populares. 4. Ejecute las instrucciones. 5. En la tabla siguiente, registre el nmero mximo de filas que se pueden devolver con un ndice.
Clusula WHERE WHERE charge_no BETWEEN 1 AND n WHERE member_no BETWEEN 1 AND n WHERE provider_no BETWEEN 1 AND n WHERE category_no BETWEEN 1 AND n Nmero aproximado de filas 116 222 70 0

6. Repita los pasos del 1 al 5 con el resto de instrucciones SELECT. Nota Observar que no es fcil predecir la selectividad de una consulta, incluso cuando se conocen los valores de todos los argumentos. Es mejor dejar que el optimizador de consultas decida cmo ejecutar la consulta.

Creacin y mantenimiento de ndices

Tiene acceso el optimizador de consultas al mismo nmero de filas en todos los ndices? Razone la respuesta. No. A medida que la selectividad disminuye y la distribucin cambia, los ndices se vuelven menos efectivos para que los use el optimizador de consultas debido a que: Los nmeros de cargo se distribuyen uniformemente por toda la tabla y son nicos. La previsibilidad de los datos es muy precisa. El nmero de miembro es menos selectivo y se distribuye desigualmente. La previsin del nmero de filas que se devuelven es menos precisa. Los nmeros de proveedor no se distribuyen uniformemente en la tabla Charge. Los proveedores ms antiguos (aquellos con nmeros de proveedor bajos) no tienen tantos cargos como los proveedores ms nuevos. Para obtener el mismo nmero de cargos que los nuevos proveedores, se utiliza un porcentaje ms grande de los proveedores ms antiguos al seleccionar cargos. Las categoras se distribuyen uniformemente por toda la tabla. Sin embargo, debido a que slo hay 10 categoras, aunque se seleccionen cargos de slo una categora, se devolver un nmero significativo de filas. Por lo tanto, el ndice no ser beneficioso.

____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________

Creacin y mantenimiento de ndices

Ejercicio 2 Vista de estadsticas de ndices y evaluacin de la selectividad de ndices


En este ejercicio crear varios ndices con la tabla Member, obtendr sus estadsticas y evaluar si un ndice es til para el optimizador de consultas segn su selectividad. Puede abrir, revisar y ejecutar secciones del archivo de comandos IndexStats.sql o bien ejecutar las instrucciones de Transact-SQL proporcionadas.

Para crear ndices


En este procedimiento ejecutar una secuencia de comandos que busca los ndices y estadsticas existentes, los elimina y, despus, crea los ndices adecuados. Ver las estadsticas en funcin de los ndices creados. 1. Con el Analizador de consultas SQL, escriba y ejecute esta instruccin para eliminar los ndices existentes de la tabla Member:
USE credit EXEC index_cleanup member

2. Escriba y ejecute estas instrucciones para crear tres ndices basados en la tabla Member:
USE credit CREATE UNIQUE INDEX indx_member_no ON member (member_no) CREATE INDEX indx_corp_lname ON member(corp_no,lastname) CREATE INDEX indx_lastname ON member (lastname) GO

Creacin y mantenimiento de ndices

Para ver las estadsticas y evaluar la selectividad de los ndices


En este procedimiento obtendr estadsticas de los ndices nuevos, registrar la informacin estadstica y evaluar la selectividad de los ndices. 1. Escriba y ejecute esta instruccin para mostrar la informacin estadstica de ndices acerca de la columna member_no de la tabla Member:
USE credit DBCC SHOW_STATISTICS (member,indx_member_no)

2. Registre la informacin estadstica de la tabla siguiente.


Informacin Rows Steps Density All density Resultado 10,000 3 .00009 .00009

Qu selectividad tiene el ndice de la columna member_no? Es muy selectivo. El ndice index_member_no se crea con la columna member_no, que contiene valores nicos. Si una consulta especifica un nmero de miembro en la clusula WHERE con una igualdad, slo se devolver una fila. ____________________________________________________________ ____________________________________________________________ 3. Escriba y ejecute esta instruccin para mostrar la informacin estadstica de ndices de un ndice compuesto basado en las columnas corp_no y lastname de la tabla Member:
USE credit DBCC SHOW_STATISTICS (member,indx_corp_lname)

4. Registre la informacin estadstica de la tabla siguiente.


Informacin Rows Steps Density All density (corp_no) (corp_no, lastname) Resultado 10,000 198 .0003 .002 .0006

Qu selectividad tiene este ndice? Sigue siendo selectivo, pero no tanto como la columna member_no, ya que existen valores duplicados. ____________________________________________________________ ____________________________________________________________

Creacin y mantenimiento de ndices

5. Escriba y ejecute esta instruccin para mostrar la informacin estadstica de ndices acerca de la columna lastname de la tabla Member:
USE credit DBCC SHOW_STATISTICS (member,indx_lastname)

6. Registre la informacin estadstica de la tabla siguiente.


Informacin Rows Steps Density All density Resultado 10,000 26 .0 .03

Qu selectividad tiene este ndice? Este ndice no es muy selectivo. El uso de la frmula para calcular la densidad muestra que este ndice tiene baja selectividad. Debido a que no puede dividir por cero, el resultado es cero. All density indica la densidad total. ((26/0)/10000) = 0 ____________________________________________________________ ____________________________________________________________

You might also like