Sunteți pe pagina 1din 15

Administracin de Bases de Datos

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

Diseo de Indices Pg. 1 de 15

Administracin de Bases de Datos

Introduccin a los ndices


El uso de ndices puede mejorar extraordinariamente el rendimiento de la base de datos. Esta seccin presenta los conceptos bsicos acerca de los ndices y explica cundo y por qu utilizarlos.

Cmo SQL Server almacena y tiene acceso a los datos


Un montn es una coleccin de pginas de datos que contienen las filas de una tabla: Cada pgina de datos contiene 8 kilobytes (KB) de informacin. Un grupo de ocho pginas adyacentes se denomina extensin. Las filas de datos no se almacenan en un orden determinado y tampoco existe un orden especfico en la secuencia de pginas de datos. Las pginas de datos no estn vinculadas en una lista vinculada. Cuando se insertan filas en una pgina llena, sta se divide.

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.

Ventajas e inconvenientes de crear ndices


Al considerar si debe crear un ndice, debe evaluar dos factores para asegurar que el ndice va a ser ms eficiente que recorrer la tabla: la naturaleza de los datos y la naturaleza de las consultas basadas en la tabla. Razones para crear un ndice Los ndices aceleran la recuperacin de los datos. Por ejemplo, sin un ndice, tendra que recorrer todo un libro pgina a pgina para encontrar informacin acerca de un tema especfico. SQL Server utiliza ndices para sealar la ubicacin de una fila en una pgina de datos, en lugar de tener que mirar en todas las pginas de datos de la tabla. Al utilizar ndices, tenga en cuenta los siguientes hechos y directrices: En general, los ndices aceleran las consultas que combinan tablas y que realizan operaciones de ordenacin o agrupamiento.

Diseo de Indices Pg. 2 de 15

Administracin de Bases de Datos

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.

Diseo de Indices Pg. 3 de 15

Administracin de Bases de Datos

Arquitectura de los ndices


La arquitectura de los ndices agrupados y no agrupados es distinta. Entender las diferencias de la arquitectura le ayudar a crear ndices del tipo ms efectivo en cada caso.

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.

ndices no agrupados creados sobre un montn


Cuando se crea un ndice no agrupado sobre un montn, SQL Server utiliza en las pginas de ndice identificadores de fila que apuntan a filas de las pginas de datos. Los identificadores de fila almacenan informacin acerca de la ubicacin de los datos.

ndices no agrupados creados sobre un ndice agrupado


Cuando un ndice no agrupado se crea sobre una tabla con un ndice agrupado, SQL Server utiliza una clave de agrupacin en las pginas de ndice para apuntar al ndice agrupado. La clave de agrupacin almacena informacin acerca de la ubicacin de los datos.

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.

Uso de los ndices agrupados


Los ndices agrupados son tiles para las columnas en las que se buscan frecuentemente intervalos de valores de clave o a las que se tiene acceso siguiendo un orden. Al crear un ndice agrupado, tenga en cuenta los siguientes hechos y directrices: Cada tabla slo puede tener un ndice agrupado.

Diseo de Indices Pg. 4 de 15

Administracin de Bases de Datos

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.

Uso de los ndices no agrupados


Los ndices no agrupados son tiles cuando los usuarios requieren varios modos de buscar datos. Por ejemplo, supongamos que un lector busca frecuentemente en un libro de jardinera los nombres corrientes y cientficos de plantas. Podra crear un ndice no agrupado para obtener los nombres cientficos y otro para obtener los nombres corrientes. Al crear un ndice no agrupado, tenga en cuenta los siguientes hechos y directrices: Si no se especifica un tipo de ndice, de forma predeterminada ser un ndice no agrupado. SQL Server vuelve a generar automticamente los ndices no agrupados existentes cuando se produce alguna de las situaciones siguientes. o Se quita un ndice agrupado existente. o Se crea un ndice agrupado. o Se utiliza la opcin DROP_EXISTING para cambiar las columnas que definen el ndice agrupado. El orden de las pginas del nivel de hoja de un ndice no agrupado es distinto del orden fsico de la tabla. El nivel de hoja est ordenado de forma ascendente. La unicidad se mantiene en el nivel de hoja, ya sea con claves de agrupacin o con identificadores de fila. Cada tabla puede tener hasta 249 ndices no 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.

Diseo de Indices Pg. 5 de 15

Administracin de Bases de Datos

Cmo SQL Server recupera los datos almacenados


Para disear bases de datos eficientes, es importante comprender cmo SQL Server almacena los datos. Esta seccin describe cmo la arquitectura de ndices de SQL Server facilita la recuperacin de datos.

Cmo SQL Server utiliza la tabla sysindexes


La tabla del sistema sysindexes es la ubicacin central donde reside la informacin vital acerca de tablas e ndices. Contiene informacin estadstica, como el nmero de filas y las pginas de datos de cada tabla y describe cmo encontrar la informacin almacenada en una tabla de datos. Los punteros de pgina de la tabla sysindexes delimitan todas las colecciones de pginas de tablas e ndices. Cada tabla tiene una coleccin de pginas de datos, junto con colecciones de pginas adicionales para implementar los ndices definidos para la tabla. Una fila en sysindexes de cada tabla e ndice se identifica de forma exclusiva mediante la combinacin de la columna de identificador de objeto (id) y la columna de identificador de ndice (indid).

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.

Bsqueda de filas sin ndices


Cuando no hay ndices en una tabla, SQL Server debe utilizar un recorrido de tabla para recuperar filas. SQL Server utiliza la tabla sysindexes para buscar la pgina IAM. Gracias a que la pgina IAM contiene una lista de todas las pginas relacionadas con esa tabla, en forma de

Diseo de Indices Pg. 6 de 15

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.

Bsqueda de filas en un montn con un ndice no agrupado


Un ndice no agrupado es como el ndice de un libro de texto. Los datos se almacenan en un lugar y el ndice en otro. Los punteros indican el lugar de almacenamiento de los elementos indizados en la tabla subyacente. Los ndices de SQL Server se organizan como rboles B. Cada pgina de un ndice contiene un encabezado de pgina seguido de las filas de ndice. Cada fila de ndice contiene un valor de clave y un puntero a otra pgina o una fila de datos. Cada pgina de un ndice se llama nodo de ndice. El nodo superior del rbol B se llama nodo raz o nivel raz. El nodo inferior se llama nodo de hoja o nivel de hoja. Cualquier nivel de ndice entre los nodos raz y de hoja son niveles intermedios. Cada pgina de los niveles intermedio o inferior tiene un puntero a las pginas precedentes y posteriores en una lista doblemente vinculada. En una tabla que slo contiene un ndice no agrupado, las nodos de hoja contienen localizadores de filas con punteros a las filas de datos que contienen los valores de clave. Cada puntero (Id. de fila o RID) se crea a partir del Id. de archivo, el nmero de pgina y el nmero de la fila en la pgina. Ejemplo SELECT lastname, firstname FROM member WHERE lastname BETWEEN 'Masters' AND 'Rudd'

Bsqueda de filas en un ndice agrupado


Los ndices agrupados y no agrupados comparten una estructura de rbol B similar. Las diferencias son las siguientes: Las pginas de datos de un ndice agrupado son los nodos de hoja de la estructura de rbol B. Las filas de datos de un ndice agrupado estn ordenadas y almacenadas de forma secuencial en funcin de su clave agrupada.

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.

Diseo de Indices Pg. 7 de 15

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'

Bsqueda de filas en un ndice agrupado con un ndice no agrupado


Cuando un ndice no agrupado se agrega a una tabla que ya tiene un ndice agrupado, el localizador de filas de cada ndice no agrupado contiene el valor de ndice de la clave agrupada de la fila. Al utilizar ndices agrupados y no agrupados en la misma tabla, la estructura de rbol B de ambos ndices tiene que recorrerse para encontrar los datos. Esto genera operaciones de E/S adicionales. Debido a que el valor de la clave de un ndice agrupado es, por lo general, mayor que el RID de 8 bytes utilizado en los montones, los ndices no agrupados pueden tener un tamao bastante mayor en tablas indizadas agrupadas que cuando se crean en montones. Mantener pequeos los valores de la clave del ndice agrupado ayuda a crear ndices menores y ms rpidos. Ejemplo SELECT lastname, firstname, phone_no FROM member WHERE firstname = 'Mike'

Diseo de Indices Pg. 8 de 15

Administracin de Bases de Datos

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.

Puntero de reenvo en un montn


Las divisiones de pginas no se producen en un montn. SQL Server dispone de un medio distinto de manejar actualizaciones e inserciones cuando las pginas de datos estn llenas. Inserciones en un montn La insercin de una fila en un montn no puede hacer que se divida una pgina, ya que es posible insertar una nueva fila siempre que haya espacio disponible. Punteros de reenvo Si la actualizacin de una fila en un montn necesita ms espacio del que hay actualmente disponible en esa pgina, la fila se mover a una nueva pgina de datos. La nueva fila deja un puntero de reenvo en su ubicacin original. Si la fila con el puntero de reenvo tiene que moverse otra vez, el puntero original se vuelve a dirigir a la nueva ubicacin. El puntero de reenvo asegura que no se tengan que cambiar los ndices no agrupados. Si una actualizacin hace que la fila avanzada se reduzca lo suficiente como para que quepa en su ubicacin original, el puntero se elimina y la actualizacin restaura el registro a su ubicacin original Divisiones de pginas en ndices no agrupados en un montn Aunque una insercin o una actualizacin no puede producir la divisin de pginas en un montn, si ste contiene un ndice sin agrupar, s puede provocar la divisin de pginas en el ndice sin agrupar.

Cmo SQL Server actualiza filas


Las actualizaciones, por lo general, no afectan a la estructura de las filas de datos. Una actualizacin no suele hacer que una fila se mueva Las actualizaciones, por lo general, no precisan que las filas se muevan. Si la actualizacin no aumenta el registro o si cualquier aumento cabe en la misma pgina, no ocurre ningn movimiento. Las actualizaciones generan normalmente un nico registro. Una actualizacin puede ser una eliminacin seguida de una insercin

Diseo de Indices Pg. 9 de 15

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.

Cmo SQL Server elimina filas


La eliminacin de filas afecta tanto al ndice como a las pginas de datos. Cmo las eliminaciones producen registros fantasma Las filas eliminadas del nivel de hoja de un ndice no desaparecen inmediatamente. Quedan marcadas como no vlidas y se llaman registros fantasma. Este proceso puede evitar la necesidad de bloquear registros adyacentes. Tambin puede prevenir los conflictos de bloqueo sobre intervalos de datos. SQL Server inicializa peridicamente un subproceso de almacenamiento especial que comprueba la existencia de registros fantasma en los ndices y los elimina. Cmo SQL Server reclama espacio Cuando se elimina la ltima fila de una pgina de datos, se anula la asignacin de la pgina entera, salvo que sea la nica pgina que queda en la tabla. Eliminacin de filas en un ndice Inmediatamente despus de que una fila es eliminada, las filas adyacentes pueden hacer uso del espacio disponible en un ndice, si bien, generalmente, suelen quedar algunos huecos hasta que el ndice se vuelve a crear. Eliminacin de filas en un montn Las filas eliminadas en un montn no se compactan hasta que se requiere espacio para una insercin. Cmo se pueden reducir los archivos Una vez eliminados los registros, los archivos se pueden reducir. SQL Server reduce los archivos al trasladar los datos a pginas disponibles al principio del archivo. Dentro de un ndice, SQL Server mueve pginas enteras para que las filas se mantengan en el orden adecuado. Los punteros de pgina se ajustan para vincular la pgina movida dentro de la secuencia correcta en la tabla. Si no hay ningn ndice agrupado, las filas individuales se pueden mover siempre que haya espacio en el archivo. La opcin de base de datos autoshrink intenta reducir la base de datos sin intervencin manual. Lo hace cada cinco minutos despus del inicio y, posteriormente, cada treinta minutos. El archivo queda reducido a un tamao donde el 25 por ciento del archivo es espacio sin utilizar o al tamao de archivo que tena cuando se cre, el que sea mayor.

Diseo de Indices Pg. 10 de 15

Administracin de Bases de Datos

Decisin de las columnas que se van a indizar


El diseo de ndices tiles es uno de los aspectos ms importantes en la mejora del rendimiento de las consultas. Requiere tanto una compresin de la estructura de los ndices como del modo en que se utilizan los datos.

Comprensin de los datos


Antes de crear un ndice, debe tener una profunda compresin de los datos, incluido: El diseo lgico y fsico. Las caractersticas de los datos. Cmo se utilizan los datos.

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.

Columnas adecuadas para indizar


Cree ndices basados en las columnas buscadas con frecuencia, por ejemplo: Claves principales. Claves externas o columnas utilizadas con frecuencia para combinar tablas. Columnas en las que se buscan intervalos o valores de clave. Columnas a las que se tiene acceso de forma ordenada. Columnas agrupadas juntas durante la agregacin.

Diseo de Indices Pg. 11 de 15

Administracin de Bases de Datos

Columnas no adecuadas para indizar


No cree ndices basados en las columnas que: Se incluyen con poca frecuencia en una consulta. Contienen pocos valores nicos. Por ejemplo, un ndice basado en una columna con dos valores, masculino y femenino, devuelve un alto porcentaje de filas. Se definen con los tipos de datos text, ntext e image. Las columnas con estos tipos de datos no se pueden indizar.

Eleccin del ndice agrupado adecuado


A la hora de seleccionar el ndice agrupado para cada tabla, tenga en cuenta cmo se utiliza la tabla. Tablas continuamente actualizadas Cuando optimice el rendimiento para la insercin de datos en una tabla muy utilizada, considere crear un ndice agrupado en una columna de identidad de clave principal. Al forzar las inserciones en un grupo pequeo de pginas al final de la tabla, la velocidad aumenta. El acceso frecuente mantiene esas pginas en memoria. Ordenacin Las tablas que con frecuencia se ordenan para informes, se agrupan para agregaciones o en las que se buscan intervalos de datos pueden beneficiarse de un ndice agrupado en la columna de ordenacin. El uso de un ndice agrupado resulta particularmente til cuando se devuelven muchas columnas de la tabla y no es prctico utilizar un ndice no agrupado. Por ejemplo, una tabla de lista de correo se beneficiara de un ndice agrupado en el cdigo postal, ya que las etiquetas de correo deben imprimirse y aplicarse en un orden determinado. Longitud de columna y tipo de datos SQL Server utiliza el valor del ndice agrupado como identificador de filas dentro de cada ndice no agrupado. El valor del ndice agrupado puede repetirse muchas veces en la estructura de la tabla. Para impedir que los ndices agrupados de gran tamao hagan mayores y ms lentos sus ndices no agrupados asociados: Limite el nmero de columnas en su ndice agrupado. Reduzca el nmero medio de caracteres mediante el tipo de datos varchar en lugar de char. Utilice el tipo de datos menor posible; por ejemplo, tinyint en lugar de int.

Creacin de ndices que admiten consultas


El rendimiento de las consultas depende de lo bien que haya diseado sus ndices. Tambin es importante escribir las consultas con un argumento de bsqueda que pueda aprovechar una columna indizada. Uso de argumentos de bsqueda Un argumento de bsqueda limita la bsqueda a una coincidencia exacta, un intervalo de valores o una combinacin de dos o ms elementos unidos por un operador AND. Un argumento de bsqueda contiene una expresin constante que acta sobre una columna por

Diseo de Indices Pg. 12 de 15

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.

Diseo de Indices Pg. 13 de 15

Administracin de Bases de Datos

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.

Determinacin de la distribucin de datos


Diseo de Indices Pg. 14 de 15

Administracin de Bases de Datos

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

Diseo de Indices Pg. 15 de 15

S-ar putea să vă placă și