Documente Academic
Documente Profesional
Documente Cultură
Diseo de ndices
Contenido
Introduccin a los ndices Arquitectura de los ndices Cmo SQL Server recupera los datos almacenados Cmo SQL Server mantiene las estructuras de los ndices y los montones Decisin de las columnas que se van a indizar 2 4 6 9 11
SQL Server tiene acceso a los datos de dos maneras: Recorre todas las pginas de datos de las tablas, en lo que se denomina un recorrido de tabla. Cuando SQL Server realiza un recorrido de tabla, sigue estos pasos: o Comienza por el principio de la tabla. o Recorre pgina a pgina todas las filas de la tabla. o Extrae las filas que cumplen los criterios de la consulta.
Utiliza ndices. Cuando SQL Server utiliza un ndice, hace lo siguiente: o Recorre la estructura de rbol del ndice para buscar las filas que solicita la consulta. o Extrae nicamente las filas necesarias que cumplen los criterios de la consulta. En primer lugar, SQL Server determina si existe un ndice. A continuacin, el optimizador de consultas, que es el componente responsable de generar el plan de ejecucin ptimo de las consultas, determina si para el acceso a los datos resulta ms eficiente recorrer una tabla o utilizar un ndice.
Los ndices fuerzan la unicidad de las filas si sta se define al crear el ndice. Los ndices se crean y mantienen en orden ascendente o descendente. Los ndices ms adecuados son los creados con columnas que tienen un alto grado de selectividad; es decir, columnas o combinaciones de columnas en las que la mayora de los datos son nicos.
Razones para no crear un ndice Los ndices son tiles, pero consumen espacio en disco y generan costos de procesamiento y mantenimiento adicionales. Al utilizar ndices, tenga en cuenta los siguientes hechos y directrices: Al modificar los datos de una columna indizada, SQL Server actualiza los ndices asociados. El mantenimiento de los ndices requiere tiempo y recursos. Por lo tanto, no deben crearse ndices que no se vayan a usar con frecuencia. Los ndices basados en columnas que contengan gran cantidad de datos duplicados pueden no suponer apenas ninguna ventaja.
ndices agrupados
En un ndice agrupado, el nivel de hoja es la pgina de datos. Los datos estn almacenados fsicamente en pginas de datos en orden ascendente. El orden de los valores en las pginas de ndice tambin es ascendente.
Uso de montones
SQL Server mantiene las pginas de datos en un montn, a menos que se haya definido un ndice agrupado en la tabla. SQL Server: Utiliza las pginas de Mapa de asignacin de ndices (IAM, Index Allocation Map) para mantener los montones. Las pginas IAM: o Contienen informacin acerca del lugar donde estn almacenadas las extensiones de un montn. La tabla de sistema sysindexes almacena un puntero a la primera pgina IAM asociada a un montn. o Se utilizan para recorrer el montn y encontrar espacio disponible para insertar nuevas filas. o Conectan las pginas de datos. Las pginas de datos y las filas que hay en ellas no tienen un orden especfico y no estn vinculadas entre s. La nica conexin lgica entre las pginas de datos es la informacin registrada en las pginas IAM. Recupera espacio para las nuevas filas del montn cuando se elimina una fila.
El orden fsico de las filas de la tabla y el orden de las filas en el ndice son el mismo. Debe crear el ndice agrupado antes de crear cualquier ndice no agrupado, ya que el primero cambia el orden fsico de las filas de la tabla. Las filas se ordenan secuencialmente y se mantienen con esa ordenacin. La unicidad de los valores de clave se mantiene explcitamente, con la palabra clave UNIQUE, o implcitamente, con un identificador nico interno. Estos identificadores nicos son internos de SQL Server y el usuario no tiene acceso a ellos. El tamao medio de un ndice agrupado es aproximadamente el cinco por ciento del tamao de la tabla. Sin embargo, vara en funcin del tamao de la columna indizada. Cuando se elimina una fila, el espacio se recupera y queda disponible para una fila nueva. Durante la creacin de un ndice, SQL Server utiliza temporalmente espacio de disco de la base de datos actual. Un ndice agrupado requiere aproximadamente 1,2 veces el tamao de la tabla como espacio de trabajo mientras se crea. El espacio de disco que se utiliza durante la creacin del ndice se recupera automticamente cuando ste se ha creado.
Asegrese de que hay espacio en disco suficiente en la base de datos al crear ndices agrupados.
Los ndices no agrupados se deben crear preferiblemente con columnas en las que los datos sean altamente selectivos o nicos. Cree los ndices agrupados antes que los no agrupados.
Los identificadores de fila especifican la ordenacin lgica de las filas y constan de un Id. de archivo, un nmero de pgina y un Id. de fila.
La columna indid
A continuacin se indica cmo las columnas de la tabla sysindexes ayudan a encontrar pginas de datos para diferentes tipos de objetos: Un montn tiene una fila en sysindexes con la columna indid establecida en cero. La columna FirstIAM de sysindexes apunta a la cadena de pginas IAM para la coleccin de pginas de datos de la tabla. SQL Server debe utilizar las pginas IAM para buscar las pginas en la coleccin de pginas de datos ya que dichas pginas no estn vinculadas juntas. Un ndice agrupado creado para una tabla tiene una fila en sysindexes con la columna indid establecida en 1. La columna root de sysindexes apunta a la parte superior del rbol equilibrado (rbol B) del ndice agrupado. Cada ndice no agrupado creado para una tabla tiene una fila en sysindexes con un valor en la columna indid. El valor de la columna indid de un ndice no agrupado oscila entre 2 y 250. La columna root de sysindexes apunta a la parte superior del rbol B del ndice no agrupado. Cada tabla que tiene al menos una columna text, ntext o image tiene tambin una fila en sysindexes con la columna indid establecida en 255. La columna FirstIAM de sysindexes apunta a la cadena de pginas IAM que administran las pginas text, ntext e image.
Administracin de Bases de Datos un mapa de bits de extensiones de ocho pginas, SQL Server puede leer todas las pginas de datos. Iniciar una bsqueda de datos en un montn mediante una pgina IAM puede ser un buen mtodo para un recorrido de tabla, pero no es conveniente para buscar un nmero pequeo de filas en una tabla grande. Las filas se devolvern sin orden. Aunque inicialmente pueden devolverse en orden de insercin, este orden no se mantiene. Una vez producidas las eliminaciones, las nuevas inserciones llenarn los huecos, lo que har que el orden sea impredecible.
Un ndice agrupado es como un directorio de telfonos en el que todas las filas de clientes con el mismo apellido se agrupan juntas en la misma parte de la libreta. Al igual que la organizacin de una gua telefnica facilita la bsqueda a una persona, SQL Server busca rpidamente una tabla con un ndice agrupado. Debido a que un ndice agrupado determina la secuencia de almacenamiento de las filas en una tabla, slo puede haber un ndice agrupado por cada tabla a la vez.
Administracin de Bases de Datos Mantener la clave agrupada en un valor pequeo aumenta el nmero de filas de ndice que se pueden colocar en una pgina de ndice y reduce el nmero de niveles que se tienen que recorrer. Esto reduce las operaciones de E/S. Si en un ndice agrupado existen valores duplicados, SQL Server debe distinguir entre filas que contienen valores idnticos en la columna o columnas de la clave. Esto lo hace mediante el uso de un entero de 4 bytes (valor de exclusividad) en una columna de exclusividad adicional slo del sistema. Ejemplo SELECT lastname, firstname FROM member WHERE lastname = 'Ota'
Cmo SQL Server mantiene las estructuras de los ndices y los montones
Divisiones de pginas en un ndice
Un ndice agrupado dirige una fila insertada o actualizada a una pgina especfica, que viene determinada por el valor de la clave agrupada. Si la pgina de datos o la pgina de ndice no dispone de espacio suficiente para acomodar los datos, se agrega una nueva pgina en un proceso conocido como divisin de pgina. La mitad de los datos aproximadamente permanecen en la pgina antigua y la otra mitad pasan a la nueva pgina. Lgicamente, la nueva pgina sigue a la pgina original; fsicamente, la nueva pgina puede asignarse a cualquier pgina disponible. Si un ndice experimenta una gran cantidad de divisiones de pgina, al reconstruir el ndice se mejorar el rendimiento. Si una pgina se divide en un ndice agrupado, SQL Server no necesita mantener los ndices no agrupados de todas las filas que se hayan movido a una nueva pgina. El localizador de filas contina identificando el lugar correcto en la clave de agrupacin.
Administracin de Bases de Datos Una actualizacin que hace que una fila se mueva se registra como una eliminacin seguida de una insercin en los siguientes casos: La actualizacin no cabe en una pgina de un montn. La tabla tiene un desencadenador de actualizaciones. La tabla est marcada para replicarse.
El valor de la clave del ndice agrupado precisa que la fila se coloque en un lugar distinto. Por ejemplo, un apellido que ha sido cambiado de Abercrombie a Yukish movera ese nombre en una gua telefnica. Las actualizaciones por lotes tocan cada ndice una sola vez Si se inserta, actualiza o elimina un nmero significativo de filas de una tabla en una sola instruccin SQL, SQL Server ordena previamente los cambios de cada ndice para que stos se realicen en el orden del ndice. Esta actualizacin por lotes da lugar a una mejora en el rendimiento notablemente superior que si se utiliza una serie de instrucciones Transact-SQL.
Para disear ndices tiles y efectivos, debe basarse en el anlisis de las consultas que envan los usuarios. Respuestas lentas a consultas o incluso bloqueos innecesarios de tablas ponen de manifiesto un anlisis deficiente de cmo los usuarios tienen acceso a los datos. Para conocer cmo los usuarios tienen acceso a los datos, debe observar lo siguiente: Los tipos de consultas realizadas. La frecuencia de las consultas ms tpicas.
Tener una profunda compresin de los requisitos de datos del usuario ayudar a determinar qu columnas indizar y qu tipos de ndices crear. Puede que tenga que sacrificar algo de velocidad en una consulta para ganar mejor rendimiento en otra.
Directrices de indizacin
El entorno de trabajo, las caractersticas de los datos y el uso que se haga de ellos determinarn las columnas que hay que especificar para crear un ndice. La utilidad de un ndice est directamente relacionada con el porcentaje de filas devueltas por una consulta. Los ndices son ms eficientes cuando el porcentaje de filas devueltas es bajo y la seleccin de filas es muy precisa. Al crear un ndice basado en una columna, sta se denomina columna de ndice. El valor de una columna de ndice se llama valor de clave.
Administracin de Bases de Datos medio de un operador. Al escribir consultas que contienen argumentos de bsqueda, el optimizador de consultas tiene mayores oportunidades de utilizar un ndice. Escritura de buenos argumentos de bsqueda Si una expresin no limita una bsqueda, se considera un argumento sin bsqueda. En muchos casos, deber volver a escribir las consultas para convertir los argumentos sin bsqueda en argumentos de bsqueda. Para limitar la bsqueda, debe hacer lo siguiente: Especificar una clusula WHERE en la consulta. Comprobar que la clusula WHERE limita el nmero de filas. Comprobar que existe una expresin para cada tabla a la que se hace referencia en la consulta. Evitar el uso de caracteres comodines iniciales.
La siguiente tabla muestra algunos buenos argumentos de bsqueda: Buen argumento de bsqueda Consulta WHERE cust_id = 47635 Limita la bsqueda porque cust_id es nico. WHERE date BETWEEN '07/23/2000' AND '07/30/2000' WHERE lastname LIKE 'Gre%' Limita la bsqueda nicamente a los apellidos que empiezan con las letras Gre. Limita la bsqueda a slo un intervalo pequeo de datos.
Determinacin de la selectividad
La selectividad es un concepto y trmino frecuentemente utilizado para explicar los ndices. A la hora de determinar las columnas que se deben indizar y seleccionar el tipo de ndice que hay que crear, debe tener en cuenta el grado de selectividad que tengan los valores de datos: Definicin de selectividad La selectividad se deriva del porcentaje de filas de una tabla a las que tiene acceso o devuelve una consulta. El optimizador de consultas determina la selectividad de las instrucciones SELECT, UPDATE o DELETE. Cuando cree ndices, debe crearlos en: Columnas a las que se haga referencia con frecuencia en operaciones de combinacin o en la clusula WHERE. Datos que sean muy selectivos.
Alta selectividad y baja selectividad En alta selectividad, los criterios de bsqueda limitan el nmero de filas devueltas a un bajo porcentaje del total posible. Una sola fila devuelta es la selectividad ms alta que se puede conseguir. En baja selectividad, los criterios de bsqueda devuelven un alto porcentaje de las filas de la tabla. Estimacin de la selectividad Puede determinar lo selectiva que es una consulta si estima el nmero de filas devueltas, con relacin al nmero total de filas en una tabla para una consulta especfica.
Ejemplo 1 En este ejemplo, suponiendo que hay 10.000 filas en la tabla member y que los nmeros de los miembros estn en el intervalo de 1 a 10.000 (todos valores nicos), la consulta devuelve una fila. SELECT * FROM member WHERE member_no = 8999 Ejemplo 2 En este ejemplo, suponiendo que hay 10.000 filas en la tabla member y que los nmeros de los miembros estn en el intervalo de 1 a 10.000 (todos valores nicos), la consulta devuelve 999 filas. SELECT * FROM member WHERE member_no > 9001 Ejemplo 3 En este ejemplo, suponiendo que hay 10.000 filas en la tabla member y que los nmeros de los miembros estn en el intervalo de 1 a 10.000 (todos valores nicos), la consulta devuelve 9.000 filas. SELECT * FROM member WHERE member_no < 9001
Determinacin de la densidad
La densidad es un concepto relacionado con la selectividad. Al determinar las columnas que se van a indizar, debe examinar la densidad de los datos. Definicin de densidad La densidad es el porcentaje promedio de las filas duplicadas en un ndice. Si los datos o las consultas no son muy selectivas (baja selectividad), se tiene un alto porcentaje de densidad. Un ndice con un gran nmero de duplicados tiene alta densidad. Por ejemplo, un ndice basado en la columna lastname puede ser muy denso. Un ndice nico tiene baja densidad. Un ejemplo de esto sera un ndice basado en el nmero de la seguridad social, Id., nmero de permiso de conducir o apellido y nombre (compuesto).
Relacin de la densidad con los datos Cuando determine la densidad de los datos, recuerde que se relaciona con los elementos de datos especficos. La densidad puede ser variable. Considere un ndice basado en la columna lastname. Los elementos de datos de este ndice son muy densos en los apellidos comunes como Randall, mientras que es probable que el apellido Ota no sea muy denso. Cmo la densidad afecta al plan de consulta Debido a que los datos no se distribuyen uniformemente, el optimizador de consultas podra utilizar un ndice o no utilizarlo. En la ilustracin, el optimizador de consultas podra hacer lo siguiente: Realizar un recorrido de tabla para recuperar el apellido Randall. Utilizar un ndice para tener acceso al apellido Ota.
La distribucin de datos est relacionada con el concepto de densidad. Al determinar la densidad de los datos, debe examinar tambin el modo en que se distribuyen. Definicin de distribucin de datos La distribucin de datos indica la cantidad de datos que existen en un intervalo de valores de una tabla dada y el nmero de filas que se encuentran dentro de ese intervalo. Si una columna indizada tiene muy pocos valores nicos, la recuperacin de datos puede ser lenta debido a su distribucin. Por ejemplo, un directorio de telfonos ordenado alfabticamente por apellido puede mostrar que hay muchos casos de personas con el apellido Randall o Jones. Distribucin estndar o uniforme En una distribucin estndar, los intervalos de valores de la clave permanecen constantes mientras que el nmero por intervalo cambia. Una distribucin uniforme permite al optimizador de consultas determinar fcilmente la selectividad de una consulta al estimar el nmero de filas habilitadas como un porcentaje del total de filas de la tabla. Relacin de la densidad con la distribucin de datos De forma similar a lo que ocurre con la densidad, los elementos de datos de un ndice pueden variar en la forma en que se distribuyen los datos. Normalmente, los datos no se distribuyen uniformemente. Por ejemplo, si la tabla member contiene 10.000 filas y tiene un ndice basado en la columna lastname, los apellidos no se suelen distribuir uniformemente. Estimacin del porcentaje de filas devueltas En muchos casos, puede estimar el porcentaje de datos que se devolvern en un conjunto de resultados. Por ejemplo, si el criterio es masculino/femenino, el conjunto de resultados para mujeres se puede estimar en un 50 por ciento. Al estimar el porcentaje de filas devueltas en valores como apellido, cuidad u otros datos demogrficos, es esencial conocer los datos, puesto que la distribucin de datos vara ampliamente en diferentes entornos. Ejemplo Esta consulta se utiliza para mostrar la distribucin (cantidad de duplicados) de los valores de columna en una base de datos existente. En este ejemplo, la consulta devuelve cada valor una sola vez con un nmero (cuenta) que indica cuntas veces aparece en la tabla. SELECT column, count(*) AS 'Data Count' FROM table GROUP BY column ORDER BY 'Data count' DESC