You are on page 1of 38

Diseo de ndices

Contenido Introduccin 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 1 2 7 12 19 25

Diseo de ndices

Notas para el instructor


Este mdulo proporciona a los alumnos una introduccin al diseo de ndices. Explica cmo los ndices pueden mejorar el rendimiento de la base de datos. Describe cmo Microsoft SQL Server 2000 almacena ndices agrupados y no agrupados y el modo en que SQL Server recupera filas mediante ndices. Tambin examina el modo en que SQL Server mantiene los ndices. El mdulo concluye con directrices para decidir las columnas que se van a indizar. En la prctica, los alumnos explorarn dos mtodos para determinar los ndices de una tabla. Despus de completar este mdulo, los alumnos sern capaces de: Describir por qu y cundo debe utilizarse un ndice. Describir cmo SQL Server utiliza ndices agrupados y no agrupados. Describir cmo la arquitectura de ndices de SQL Server facilita la recuperacin de datos. Describir cmo SQL Server mantiene ndices y montones. Describir la importancia de la selectividad, densidad y distribucin de datos al decidir qu columnas indizar.

Diseo de ndices

Introduccin
Objetivo del tema
Proporcionar una introduccin a los temas y objetivos del mdulo.

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

Explicacin previa

En este mdulo, aprender cundo y por qu se deben crear ndices y los diferentes tipos de ndices. Aprender cmo SQL Server utiliza y mantiene ndices y el modo de disear el ndice adecuado para sus necesidades.

Este mdulo proporciona una introduccin al diseo de ndices. Explica cmo los ndices pueden mejorar el rendimiento de la base de datos. Describe cmo Microsoft SQL Server 2000 almacena ndices agrupados y no agrupados y el modo en que SQL Server recupera filas mediante ndices. Tambin examina el modo en que SQL Server mantiene los ndices. El mdulo concluye con directrices para decidir las columnas que se van a indizar. Despus de realizar esta prctica, el alumno ser capaz de: Describir por qu y cundo debe utilizarse un ndice. Describir cmo SQL Server utiliza ndices agrupados y no agrupados. Describir cmo la arquitectura de ndices de SQL Server facilita la recuperacin de datos. Describir cmo SQL Server mantiene ndices y montones. Describir la importancia de la selectividad, densidad y distribucin de datos al decidir qu columnas indizar.

Diseo de ndices

Introduccin a los ndices


Objetivo del tema
Presentar los ndices.

Explicacin previa

Esta seccin describe por qu y cundo debe utilizarse un ndice.

Cmo SQL Server almacena y tiene acceso a los datos Ventajas e inconvenientes de crear 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.

Diseo de ndices

Cmo SQL Server almacena y tiene acceso a los datos


Objetivo del tema
Explicar cmo SQL Server almacena los datos y permite el acceso a ellos.

Cmo se almacenan los datos Las filas se almacenan en pginas de datos Los montones son una coleccin de pginas de datos para una tabla Acceso a los datos Recorre todas las pginas de datos en una tabla Mediante un ndice que apunte a los datos de una pgina
Pginas de datos
Pgina 4
Con Funk White ... ... ... ... ... ... ...

Explicacin previa

Comprender cmo se almacenan los datos es el fundamento para entender cmo SQL Server tiene acceso a ellos.

Pgina 5
Rudd White Barr
... ... ... ... ... ... ...

Pgina 6
Akhtar Funk Smith Martin ...
... ... ... ... ...

Pgina 7
Smith Ota Jones
... ... ... ... ... ... ...

Pgina 8
Martin Phua Jones Smith ...
... ... ... ... ...

Pgina 9
Ganio Jones Hall
... ... ... ... ... ... ...

Comprender cmo se almacenan los datos es el fundamento para entender cmo SQL Server tiene acceso a ellos. Sugerencia Nota En la ilustracin slo se muestran los apellidos en las pginas de datos, aunque stas almacenan filas completas.

Seale que en la diapositiva slo se muestran los apellidos en las pginas de datos, aunque stas almacenan filas completas.

Cmo se almacenan 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.

Diseo de ndices

Acceso a los datos


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: Comienza por el principio de la tabla. Recorre pgina a pgina todas las filas de la tabla. Extrae las filas que cumplen los criterios de la consulta. Utiliza ndices. Cuando SQL Server utiliza un ndice, hace lo siguiente: Recorre la estructura de rbol del ndice para buscar las filas que solicita la consulta. 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.

Diseo de ndices

Ventajas e inconvenientes de crear ndices


Objetivo del tema
Explicar cundo conviene crear ndices.

Explicacin previa

Razones para crear un ndice Acelerar el acceso a datos Fuerzan la unicidad de las filas Razones para no crear un ndice Consumen espacio en disco Generan costos de procesamiento

La creacin de un ndice no es obligatoria. Veamos por qu puede ser conveniente crear un ndice.

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. 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.

Diseo de ndices

Sugerencia

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.

Pregunta: Son imprescindibles los ndices? Respuesta: No. Es posible consultar y manipular los datos sin tener ningn ndice. Sin embargo, el acceso a los datos es considerablemente ms lento.

Diseo de ndices

Arquitectura de los ndices


Objetivo del tema
Presentar la arquitectura agrupada y no agrupada de los ndices.

Arquitectura de ndices de SQL Server Uso de montones Uso de los ndices agrupados Uso de los ndices no agrupados

Explicacin previa

Esta seccin describe cmo SQL Server utiliza ndices agrupados y no agrupados.

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.

Diseo de ndices

Arquitectura de ndices de SQL Server


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.

Diseo de ndices

Uso de montones
Objetivo del tema
Explicar cmo SQL Server utiliza montones.

SQL Server: Utiliza las pginas de Mapa de asignacin de ndices que: Contienen informacin acerca del lugar donde estn almacenadas las extensiones de un montn Se utilizan para recorrer el montn y encontrar espacio disponible para insertar nuevas filas Conectan pginas de datos Recupera espacio para las nuevas filas del montn cuando se elimina una fila

Explicacin previa

SQL Server mantiene las pginas de datos en un montn, a menos que se haya definido un ndice agrupado en la tabla.

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: 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. Se utilizan para recorrer el montn y encontrar espacio disponible para insertar nuevas filas. 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.

Diseo de ndices

10

Uso de los ndices agrupados


Objetivo del tema
Explicar algunos hechos acerca de los ndices agrupados.

Cada tabla slo puede tener un ndice agrupado El orden fsico de las filas de la tabla y el orden de las filas en el ndice son el mismo La unicidad de los valores de clave se mantiene explcitamente o implcitamente

Explicacin previa

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.

Sugerencia

Despus de explicar los puntos de la diapositiva, pregunte a los alumnos qu le ocurre a un ndice agrupado cuando se agregan filas a la tabla. Pregunta: Por qu no es posible tener dos ndices agrupados en una tabla? Respuesta: SQL Server slo almacena una ordenacin fsica de las filas de cada tabla.

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. 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.

Sugerencia

Pregunta: De dnde procede el valor 1,2? Respuesta: 1 = datos y 0,2 = ndice. Estos valores son estimaciones conservadoras.

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. Nota Asegrese de que hay espacio en disco suficiente en la base de datos al crear ndices agrupados.

Diseo de ndices

11

Uso de los ndices no agrupados


Objetivo del tema
Explicar algunos hechos acerca de los ndices no agrupados.

Explicacin previa

Los ndices no agrupados son los predeterminados de SQL Server Los ndices no agrupados existentes se vuelven a generar automticamente Se quita un ndice agrupado existente Se crea un ndice agrupado Se utiliza la opcin DROP_EXISTING para cambiar las columnas que definen el ndice agrupado

Los ndices no agrupados son tiles cuando los usuarios requieren varios modos de buscar datos.

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. Se quita un ndice agrupado existente. Se crea un ndice agrupado. 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 ndices

12

Cmo SQL Server recupera los datos almacenados


Objetivo del tema
Presentar la recuperacin de los datos.

Explicacin previa

Cmo SQL Server utiliza la tabla sysindexes Bsqueda de filas sin ndices Bsqueda de filas en un montn con un ndice no agrupado Bsqueda de filas en un ndice agrupado Bsqueda de filas en un ndice agrupado con un ndice no agrupado

Esta seccin describe cmo la arquitectura de ndices de SQL Server facilita la recuperacin de datos.

En ella se repite informacin contenida en los cursos de requisitos previos. Repsela rpidamente si los alumnos tienen una buena compresin de una instruccin SELECT.

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.

Diseo de ndices

13

Cmo SQL Server utiliza la tabla sysindexes


Objetivo del tema
Describir la funcin de sysindexes en una bsqueda de datos.

Describe los ndices


Id. de ndice Id. de ndice
0 0 1 1 2 a 250 2 a 250 255 255

Tipo de objeto Tipo de objeto


Montn Montn ndice agrupado ndice agrupado ndice no agrupado ndice no agrupado text, ntext o image text, ntext o image

Explicacin previa

La tabla del sistema sysindexes proporciona el primer paso en una bsqueda de datos.

Ubicacin de IAM, primero y raz de ndices Nmero de pginas y filas Distribucin de datos

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.

Diseo de ndices

14

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. Sugerencia
La informacin generada por el comando UPDATE STATISTICS tambin se encuentra en sysindexes.

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.

Diseo de ndices

15

Bsqueda de filas sin ndices


Objetivo del tema
Describir la bsqueda de datos en un montn.
sysindexes id indid = 0 IAM
Primera IAM

Explicacin previa

Cuando una tabla no tiene un ndice agrupado o ndices no agrupados tiles, SQL Server utiliza la pgina IAM para iniciar un recorrido de tabla.
Montn
Extensin 127 01 Con 01 Rudd 020101 Akhtar Funk 020101 Smith White Con Funk 03020201 Funk 02 BarrRudd White Akhtar Ota Smith 03 0201 White Smith 04030302 White... DurkinFunk 030302 Barr ... ... Jones... Ota Martin 050403 ... Smith... Lang ... 03 ... Jones... ... ... 04 Martin ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...

Extensin

Mapa de bits

127 128 129 130

1 1 0 1

Extensin 128 01 Dunn 01 Rudd 020101 Akhtar Randall 020101 Smith White Con Funk 03020201 Funk Ota Rudd Ota Smith 03020201 White Barr Akhtar Smith ... 04030302 White... 03 ...02 Funk SlichterOta Jones 03 Barr ... Martin 050403 ... Smith... LaBrie ... 03 ... Jones... ... ... ... Martin ... ... 04 ... ... ... ... ... ... ... ... ... ... ... ...

Extensin 129 01 Seattle 01 Rudd 020101 Akhtar Paris 020101 Smith White Con Funk Rudd 03020201 Funk TokyoAkhtar Ota 03020201 White Barr Smith Smith ... 04030302 White... 03 ...02 Funk Atlanta Ota Jones 03 Barr ... 0403 ... Smith... ... Martin ... 03 ... Jones... ... ... ... Martin ... ... 04 ... ... ... ... ... ... ... ... ... ... ... ...

Extensin 130 01 Graff 01 Rudd 020101 Akhtar Bacon 020101 Smith White Con Funk 03020201 Funk KochRudd Ota Smith 03020201 White Barr Akhtar 030302 White... 03 ...02 Funk ... Smith ... Jones 03 Barr ... Ota 0403 ... Smith... ... Martin ... 03 ... Jones... ... ... ... Martin ... ... 04 ... ... ... ... ... ... ... ... ... ... ... ...

Sugerencia

sta es una diapositiva animada. Consulte las Notas para el instructor si necesita ayuda para desplazarse por esta diapositiva. Indique que la pgina IAM con frecuencia se encuentra en memoria y contiene informacin eficiente densamente empaquetada. Seale que, en ausencia de un ndice, slo un recorrido de tabla puede recuperar filas.

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 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.

Diseo de ndices

16

Bsqueda de filas en un montn con un ndice no agrupado


Objetivo del tema
sysindexes id indid = 2 raz ndice no ndice agrupado no agrupado

Describir la bsqueda de datos con un ndice no agrupado.

Explicacin previa

Los punteros son muy importantes para la bsqueda de ndices no agrupados.

BETWEEN Pg. 41 Pg. 51 Akhtar 4:706:01 Ganio 4:709:01 Akhtar 4:706:01 Ganio 4:709:01 Barr 4:705:03 Hall 4:709:04 Barr 4:705:03 Hall 4:709:04 Con 4:704:01 Jones 4:709:02 Con 4:704:01 Jones 4:709:02 Funk 4:706:02 Jones 4:708:03 Funk 4:706:02 Jones 4:708:03 Funk 4:704:02 Jones 4:707:03 Funk 4:704:02 Jones 4:707:03
Montn
Pg. 704 01 ... Conn 02 ... Funk 03 ... White ... ... ... ... ... ... File ID #4 Pg. 705 01 ... Rudd 02 ... White 03 ... Barr ... ... ... ... ... ...

Akhtar Akhtar No situadas ... ... en el nivel Martin SELECT Martin Pg. 37 SELECT lastname, firstname Pg. 28 lastname, firstname de hoja Pg. 12 - Raz Akhtar Martin FROM member AkhtarFROM member Martin Ganio Ganio Smith WHERE lastname Smith WHERE lastname ... ... ... ...

BETWEEN 'Masters' AND 'Rudd' 'Masters' Pg. 71 'Rudd'de hoja AND Pg. 61 Nivel
Martin 4:708:01 Martin 4:708:01 Matey 4:706:04 Matey 4:706:04 Ota 4:707:02 Ota 4:707:02 Ota Phua 4:708:02 Phua 4:708:02 Rudd 4:705:01 Rudd 4:705:01 Smith Smith Smith Smith Smith Smith White White White White 4:706:03 4:706:03 4:708:04 4:708:04 4:707:01 4:707:01 4:704:03 4:704:03 4:705:02 4:705:02

(Valor de clave)

Pg. 706 01 ... Akhtar 02 ... Funk 03 ... Smith 04 ... Matey ... ... ...

Pg. 707 01 ... Smith 02 ... 02 ... Ota 03 ... Jones ... ... ... ... ... ...

Pg. 808 01 ... Martin 02 ... Phua 02 03 ... Jones 04 ... Smith ... ... ...

P 709 Pg. 709 01 ... Ganio 02 ... Jones 03 ... Hall ... ... ... ... ... ...

Sugerencia

sta es una diapositiva animada. Consulte las Notas para el instructor si necesita ayuda para desplazarse por esta diapositiva. Los alumnos deben estar ya familiarizados con la estructura del rbol B. Subraye el uso y la estructura de los punteros.

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'

Diseo de ndices

17

Bsqueda de filas en un ndice agrupado


Objetivo del tema
Describir la bsqueda de datos con un ndice agrupado.
sysindexes ndice agrupado
Akhtar Akhtar Martin Martin Pg. 140 - Raz

id

indid = 1

raz

Explicacin previa

Los ndices agrupados estn ordenados de forma secuencial en funcin de su clave agrupada.
Akhtar 2334 Akhtar 2334 Barr Barr 5678 5678 Con 2534 Con 2534 Funk 1334 Funk 1334 Funk 1534 Funk 1534 ... ... ... ... Pg. 100

Akhtar Akhtar Martin SELECT lastname, firstname Martin SELECT lastname, firstname Smith Ganio Ganio Smith FROM member FROM member WHERE lastname = 'Ota' WHERE Pg. 141 lastname = 'Ota' Pg. 145 ... ... ... ... ... ... ... ... ... ... ... ... Ganio 7678 Ganio 7678 Hall 8078 Hall 8078 Jones 2434 Jones 2434 Jones 5978 Jones 5978 Jones 2634 Jones 2634 ... ... ... ... Pg. 110 ... ... ... ... ... ... ... ... ... ... ... ... Martin 1234 Martin 1234 Martin 7778 Martin 7778 Ota 5878 Ota 5878 Phua 7878 Phua 7878 Rudd 6078 Rudd 6078 ... ... ... ... Pg. 120 ... ... ... ... ... ... ... ... ... ... ... ... Smith 1434 Smith 1434 Smith 5778 Smith 5778 Smith 7978 Smith 7978 White 2234 White 2234 White 1634 White 1634 ... ... ... ... Pg. 130 ... ... ... ... ... ... ... ... ... ... ... ...

Sugerencia

sta es una diapositiva animada. Consulte las Notas para el instructor si necesita ayuda para desplazarse por esta diapositiva.

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. 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. Nota 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'

Diseo de ndices

18

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


Objetivo del tema
sysindexes ndice no agrupado para First Name Aaron Aaron id indid = 2 Aaron Aaron ... ... Jose Jose raz No situadas en el nivel de hoja Jose Jose

Describir la bsqueda de datos cuando ambos tipos de ndices estn presentes.

Explicacin previa

El ndice secundario se utiliza para acelerar las bsquedas en columnas adicionales.

Aaron Aaron Adam Adam Amie Amie ndice agrupado para Last Name Barr Barr Cox Cox Daum Daum

SELECT lastname, firstname, phone SELECT lastname, firstname, phone Deanna Nina Deanna Nina FROM FROM member member WHERE firstname = 'Mike' WHERE firstname = 'Mike'
Con Con Barr Barr Baldwin Baldwin Deanna Deanna Don Don Doug Doug Barr Barr Kim Kim Nagata Nagata OMelia OMelia Daum Daum Hall Hall Hampton Hampton Jose Jose Judy Judy Mike Mike

Lugo Lugo Kaethler Kaethler Nash Nash

Nivel de hoja
(Valor de clave agrupado)

Adam Adam Arlette Arlette Deanna Deanna

Kim Kim Kobara Kobara LaBrie LaBrie

Shane Shane Linda Linda Ryan Ryan

Nagata Nagata Nash Nash Nixon Nixon

Susanne Susanne Mike Mike Toby Toby

Sugerencia

sta es una diapositiva animada. Consulte las Notas para el instructor si necesita ayuda para desplazarse por esta diapositiva.

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 ndices

19

Cmo SQL Server mantiene las estructuras de los ndices y los montones
Objetivo del tema
Presentar cmo SQL Server mantiene las estructuras de ndices y montones.

Divisiones de pginas en un ndice Puntero de reenvo en un montn Cmo SQL Server actualiza filas Cmo SQL Server elimina filas

Explicacin previa

Esta seccin describe cmo SQL Server mantiene ndices y montones

Esta seccin explica cmo SQL Server mantiene ndices y montones al insertar, actualizar y eliminar filas.

Diseo de ndices

20

Divisiones de pginas en un ndice


Objetivo del tema
Describir el concepto de una divisin de pgina.
Pginas de ndice

INSERT member (last name) INSERT member (last name) VALUES lastname = Jackson' VALUES lastname = Jackson'
No situadas en el nivel de hoja
Lang Lang Smith Smith

Explicacin previa

Insertar una fila en una pgina llena puede causar la divisin de la misma.

Akhtar Akhtar Martin Martin Akhtar Akhtar Ganio Ganio Jackson

Nivel de hoja Nivel de hoja


Akhtar Akhtar Barr Barr Barr Barr Borm Borm Buhl Buhl Ganio Akhtar Akhtar Ganio Hall Barr Hall Barr Hart Barr Hart Barr Borm Borm Buhl Buhl Jackson Ganio Jackson Ganio Jones Hall Jones Hall Jones Hart Jones Hart Jones Jones Jones Jones Lang Lang Martin Martin Martin Martin Martin Martin Moris Moris Smith Smith Smith Smith Smith Smith Smith Smith Smith Smith (Valor de clave)

Sugerencia

sta es una diapositiva animada. Consulte las Notas para el instructor si necesita ayuda para desplazarse por esta diapositiva.

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. Nota 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.

Sugerencia

Seale que el ndice no agrupado debe modificarse para agregar Jackson, pero que no es necesario actualizarlo con la nueva ubicacin de Jones.

Diseo de ndices

21

Puntero de reenvo en un montn


Objetivo del tema
sysindexes id indid = 2
Akhtar Akhtar ... ... Martin Martin Pg. 12 - Raz

raz No situadas en el nivel de hoja ndice no agrupado

Describir el concepto de un puntero de reenvo.

Explicacin previa

Si una fila de un montn se hace demasiado grande para su ubicacin original, se mover a otra pgina.

SET Pg. 51 SET Address =Pg. 61 Address = <something 71long> de hoja <something long> Pg. 41 Pg. Nivel WHERE lastname Akhtar 4:706:01 Ganio lastname = 4:708:01 Smith 4:706:03 (Valor (Valor de de clave) WHERE 4:709:01 Martin 'Ota' 'Ota' Akhtar 4:706:01 Ganio 4:709:01 Martin= 4:708:01 Smith 4:706:03 Barr 4:705:03 Hall 4:709:04 Martin 4:706:04 Smith 4:708:04 Barr 4:705:03 Hall 4:709:04 Martin 4:706:04 Smith 4:708:04 clave) Con 4:704:01 Jones 4:709:02 Ota 4:707:02 Smith 4:707:01 Ota 4:707:02 Smith 4:707:01 Con 4:704:01 Jones 4:709:02 Ota Funk 4:706:02 Jones 4:708:03 Phua 4:708:02 White 4:704:03 Funk 4:706:02 Jones 4:708:03 Phua 4:708:02 White 4:704:03 Funk 4:704:02 Jones 4:707:03 Rudd 4:705:01 White 4:705:02 Funk 4:704:02 Jones 4:707:03 Rudd 4:705:01 White 4:705:02
Montn
Pg. 704 01 ... Conn 02 ... Funk 03 ... White ... ... ... ... ... ... File ID #4 Pg. 705 01 ... Rudd 02 ... White 03 ... Barr ... ... ... ... ... ... Pg. 706 01 ... Akhtar 02 ... Funk 03 ... Smith 04 ... Martin ... ... ... Pg. 707 01 ... Smith 02 ... Ota 02 ... 03 ... Jones 04 ... Corets 05 ... Nash Pg. 808 01 ... Martin 02 ... Phua 03 ... Jones 04 ... Smith ... ... ... Pg. 709 01 ... Ganio 02 ... Jones 03 ... Hall ... ... ...Ota 04 ... ... ...

Pg. 37 Akhtar Akhtar Ganio Ganio UPDATE ... ... UPDATE

member member

Pg. 28 Martin Martin Smith Smith ... ...

Sugerencia

sta es una diapositiva animada. Consulte las Notas para el instructor si necesita ayuda para desplazarse por esta diapositiva.

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.

Diseo de ndices

22

Cmo SQL Server actualiza filas


Objetivo del tema
Describir los efectos de actualizar datos.

Explicacin previa

Una actualizacin no suele hacer que una fila se mueva Una actualizacin puede ser una eliminacin seguida de una insercin Las actualizaciones por lotes tocan cada ndice una sola vez

Las actualizaciones, por lo general, no afectan a la estructura de las filas de datos.

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


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.

Diseo de ndices

23

Cmo SQL Server elimina filas


Objetivo del tema
Describir la eliminacin de filas.

Cmo las eliminaciones producen registros fantasma Cmo SQL Server reclama espacio Cmo se pueden reducir los archivos
Las pginas de ndice agrupadas se desplazan como una unidad

Explicacin previa

Cuando una fila se elimina, tanto el ndice como las pginas de datos cambian.

Los registros del montn se desplazan de forma individual

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.

Diseo de ndices

24

Cmo se pueden reducir los archivos


Sugerencia
Seale que las filas en un montn se mueven individualmente. Las filas no mantienen el orden de insercin.

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. Nota 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 ndices

25

Decisin de las columnas que se van a indizar


Objetivo del tema
Presentar los temas de esta seccin.

Explicacin previa

Comprensin de los datos Directrices de indizacin Eleccin del ndice agrupado adecuado Creacin de ndices que admiten consultas Determinacin de la selectividad Determinacin de la densidad Determinacin de la distribucin de datos

El diseo de ndices tiles es uno de los aspectos ms importantes en la mejora del rendimiento de las consultas.

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.

Diseo de ndices

26

Comprensin de los datos


Objetivo del tema
Sealar que el primer paso en la creacin de ndices es comprender los datos y la forma en que los usuarios tienen acceso a ellos.

El diseo lgico y fsico Las caractersticas de los datos Cmo se utilizan los datos Los tipos de consultas realizadas La frecuencia de las consultas ms tpicas

Explicacin previa

Antes de crear un ndice, debe tener una profunda compresin 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.

Diseo de ndices

27

Directrices de indizacin
Objetivo del tema
Considerar qu columnas se deben indizar.

Columnas adecuadas para indizar Claves principal y externa En las que se buscan frecuentemente intervalos A las que se tiene acceso de forma ordenada Agrupadas juntas durante la agregacin Columnas no adecuadas para indizar Se incluyen con poca frecuencia en consultas Contienen pocos valores nicos Se definen con los tipos de datos text, ntext o image

Explicacin previa

Al crear un ndice, considere la naturaleza del entorno y cmo se distribuirn los datos.

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. Nota 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. Sugerencia

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.

Pregunta: Pueden indizarse todas las columnas? Respuesta: S, pueden indizarse todas las columnas, pero hacerlo resultara poco eficiente. Pregunta: Es posible indizar una nica columna ms de una vez? Respuesta: S, pero en general hacerlo es poco eficiente.

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.

Diseo de ndices

28

Eleccin del ndice agrupado adecuado


Objetivo del tema
Determinar el mejor tipo de ndice para una base de datos.

Tablas continuamente actualizadas Un ndice agrupado con una columna de identidad mantiene las pginas actualizadas en memoria Ordenacin Un ndice agrupado mantiene los datos preordenados Longitud de columna y tipo de datos Limita el nmero de columnas Reduce el nmero de caracteres Utiliza los tipos de datos ms pequeos posibles

Explicacin previa

A la hora de seleccionar el ndice agrupado, tenga en cuenta cmo se utiliza la tabla.

Sugerencia

Indique a los alumnos que no deben colocar automticamente el ndice agrupado en la clave principal. Considere el uso de la tabla.

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.

Diseo de ndices

29

Creacin de ndices que admiten consultas


Objetivo del tema
Comprender por qu es importante limitar la bsqueda y cmo hacerlo.

Uso de argumentos de bsqueda Escritura de buenos argumentos de bsqueda 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

Explicacin previa

El rendimiento de las consultas depender de lo bien que haya diseado sus ndices y de lo selectivas que sean las consultas. Siempre debe escribir consultas que limiten una bsqueda.

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 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.

Diseo de ndices

30

La siguiente tabla muestra algunos buenos argumentos de bsqueda:


Buen argumento de bsqueda
WHERE cust_id = 47635 WHERE date BETWEEN '07/23/2000' AND '07/30/2000' WHERE lastname LIKE 'Gre%'

Consulta Limita la bsqueda porque cust_id es nico. Limita la bsqueda a slo un intervalo pequeo de datos. Limita la bsqueda nicamente a los apellidos que empiezan con las letras Gre.

Diseo de ndices

31

Determinacin de la selectividad
Objetivo del tema
Presentar el concepto de selectividad.
member_no last_name first_name member_no last_name first_name Nmero de filas que cumplen el criterio 1000 11 Randall Joshua Randall Joshua = 10000 = 10% Nmero total de filas en la tabla 22 Flood Kathie Flood Kathie .. SELECT * SELECT * FROM member .. FROM member WHERE member_no > 8999 WHERE member_no > 8999 .. 10000 Anderson Bill 10000 Anderson Bill

Alta selectividad

Explicacin previa

La selectividad es un concepto y trmino frecuentemente utilizado para explicar los ndices.

member_no last_name first_name member_no last_name first_name Nmero de filas que cumplen el criterio 9000 11 Randall Joshua Randall Joshua = 10000 = 90% Nmero total de filas en la tabla 22 Flood Kathie Flood Kathie .. SELECT * SELECT * FROM member .. FROM member WHERE member_no < 9001 WHERE member_no < 9001 .. 10000 Anderson Bill Anderson Bill 10000

Baja selectividad

Sugerencia

Los ejemplos de la diapositiva no se pueden ejecutar en la base de datos credit.

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 ndices

32

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

Diseo de ndices

33

Determinacin de la densidad
Objetivo del tema
Presentar el concepto de densidad.
last_name first_name last_name first_name Randall Joshua Randall Joshua .. .. .. Randall Randall Randall Randall .. .. .. Ota Ota .. .. .. Lani Lani Cynthia Cynthia Tristan Tristan

Explicacin previa

Alta densidad
SELECT * SELECT * FROM member FROM member WHERE last_name = WHERE last_name = Randall Randall

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.

Baja densidad
SELECT * SELECT * FROM member FROM member WHERE last_name = Ota WHERE last_name = Ota

Sugerencia

Los ejemplos de la diapositiva no se pueden ejecutar en la base de datos credit.

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.

Diseo de ndices

34

Diseo de ndices

35

Determinacin de la distribucin de datos


Explicar el concepto de distribucin de datos y las diferentes formas en que se puede examinar la distribucin de datos.

Objetivo del tema

Distribucin estndar de valores

Nmero de Last Names A-E F-J K-O P-U Last Name V-Z

Explicacin previa

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.

Distribucin uniforme de valores

Nmero de Last Names A-B C-F G-K L-N Last Name O-Z

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.

Diseo de ndices

36

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

Los ejemplos de la diapositiva no se pueden ejecutar en la base de datos credit.

Sugerencia

You might also like