Está en la página 1de 38

Diseo de ndices

Contenido
Introduccin

Introduccin a los ndices

Arquitectura de los ndices

Cmo SQL Server recupera los


datos almacenados

12

Cmo SQL Server mantiene las


estructuras de los ndices y los montones

19

Decisin de las columnas que se van


a indizar

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.

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.

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

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


z

Las filas se almacenan en pginas de datos

Los montones son una coleccin de pginas de datos


para una tabla

Explicacin previa

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

Acceso a los datos


z

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

Pgina 5
...
...
...
...
...

Rudd
White
Barr
...
...

Pgina 6
...
...
...
...
...

Akhtar
Funk
Smith
Martin
...

Pgina 8

Pgina 7
...
...
...
...
...

Smith
Ota
Jones
...
...

...
...
...
...
...

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

Seale que en la diapositiva slo se muestran los


apellidos en las pginas
de datos, aunque stas
almacenan filas completas.

Nota En la ilustracin 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

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

Razones para crear un ndice


z

Acelerar el acceso a datos

Fuerzan la unicidad de las filas

Razones para no crear un ndice


z

Consumen espacio en disco

Generan costos de procesamiento

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

Pregunta: Son
imprescindibles los
ndices?

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:

Respuesta: No. Es posible


consultar y manipular los
datos sin tener ningn
ndice. Sin embargo, el
acceso a los datos es
considerablemente ms
lento.

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 ndices

Arquitectura de los ndices


Objetivo del tema

Presentar la arquitectura
agrupada y no agrupada
de los ndices.

Explicacin previa

Esta seccin describe cmo


SQL Server utiliza ndices
agrupados y no agrupados.

Arquitectura de ndices de SQL Server

Uso de montones

Uso de los ndices agrupados

Uso de los ndices 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:

Explicacin previa

SQL Server mantiene las


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

Utiliza las pginas de Mapa de asignacin de ndices


que:
z

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

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.

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.

Sugerencia

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

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

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.

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.

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.

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.

Los ndices no agrupados son los predeterminados de


SQL Server

Los ndices no agrupados existentes se vuelven a


generar automticamente

Explicacin previa

Los ndices no agrupados


son tiles cuando los
usuarios requieren varios
modos de buscar datos.

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

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.

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

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.
Id. de
de ndice
ndice

Explicacin previa

La tabla del sistema


sysindexes proporciona
el primer paso en una
bsqueda de datos.

Tipo
Tipo de
de objeto
objeto

00

Montn
Montn

11

ndice
ndice agrupado
agrupado

22 aa 250
250

ndice
ndice no
no agrupado
agrupado

255
255

text,
text, ntext
ntext oo image
image

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

Sugerencia

La informacin generada
por el comando UPDATE
STATISTICS tambin se
encuentra en sysindexes.

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.

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

sysindexes
id indid = 0

Describir la bsqueda de
datos en un montn.

Explicacin previa

IAM

Extensin

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.

127
128
129
130

Montn

Extensin 127
01
Con

01
Rudd
01
Akhtar
02
01
Funk
Smith

02
01
White
Con
02
01
Funk
Rudd
03
02
White
01
Ota
Akhtar

03
02
Barr
01Funk
Smith
03
02
Smith
White
04
03
Durkin
02
Jones
Funk
......
04
03
...
02
White
Ota
03
Martin
05
Lang
03
...Barr
Smith
...............

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

Extensin 128
01
Dunn

01
Rudd
01
Akhtar
02
01
Randall
Smith

02
01
White
Con
02
01
Funk
Rudd
03
02
Ota
01
Ota
Akhtar

03
02
Barr
01Funk
Smith
03
02
Smith
White
04
03
Slichter
02
Jones
Funk
......
04
03
...
02
White
Ota
03
Martin
05
LaBrie
03
...Barr
Smith
...............

...
03
Jones
...... ...Martin
...... ......
04

...

...... ...
......
......
...

Primera IAM

Mapa de bits

1
1
0
1

Extensin 129
01
Seattle

01
Rudd
01
Akhtar
02
01
Paris
Smith

02
01
White
Con
02
01
Funk
Rudd
03
02
Tokyo
01
Ota
Akhtar

03
02
Barr
01Funk
Smith
03
02
Smith
White
04
03
Atlanta
02
Jones
Funk
......
04
03
...
02
White
Ota
03
Martin

...
03
...Barr
Smith
...............
...
03
Jones
04
...... ...Martin
... ...

...... ...............
......
......

Extensin 130
01
Graff

01
Rudd
01
Akhtar
02
01
Bacon
Smith

02
01
White
Con
02
01
Funk
Rudd
03
02
Koch
01
Ota
Akhtar

03 02
Barr
01Funk
Smith
02
Smith
White
03
03
...
02
Jones
Funk
......
03
...
02
White
Ota
03
Martin
04

...
03
...Barr
Smith
...............
...
03
Jones
04
...... ...Martin
... ...

...... ...............
......
......

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

Describir la bsqueda
de datos con un ndice
no agrupado.

id

indid = 2

raz

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

Explicacin previa

Los punteros son muy


importantes para la
bsqueda de ndices
no agrupados.

ndice
ndice
no
agrupado
no
agrupado

BETWEEN 'Masters'
AND
'Masters'
AND71 'Rudd'
'Rudd'
Pg. 61
Pg.
Nivel de hoja

BETWEEN
Pg. 41
Pg.
51
Akhtar
4:706:01 Ganio
4:709:01
Akhtar 4:706:01
Ganio 4:709:01
Barr
Hall
Barr 4:705:03
4:705:03
Hall 4:709:04
4:709:04
Con
Con 4:704:01
4:704:01 Jones
Jones 4:709:02
4:709:02
Funk
Funk 4:706:02
4:706:02 Jones
Jones 4:708:03
4:708:03
Funk
Funk 4:704:02
4:704:02 Jones
Jones 4:707:03
4:707:03

Martin
4:708:01
Martin 4:708:01
Matey 4:706:04
Matey
4:706:04
Ota
Ota
Ota 4:707:02
4:707:02
Phua
Phua 4:708:02
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)

Montn
Pg. 704
01 ... Conn
02 ... Funk
03 ... White
... ... ...
... ... ...
File ID #4

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.

Pg. 705
01 ... Rudd
02 ... White
03 ... Barr
... ... ...
... ... ...

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

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

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

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

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

sysindexes

Describir la bsqueda
de datos con un ndice
agrupado.

id

Akhtar
Akhtar

Martin
Martin
Pg. 140 - Raz

Los ndices agrupados


estn ordenados de forma
secuencial en funcin de
su clave agrupada.

Akhtar
Akhtar lastname, firstname Martin
Martin
SELECT
SELECT
lastname, firstname Smith
Ganio
Ganio
Smith
FROM
member
FROM

member

WHERE
lastname
=
'Ota'
WHERE
Pg.
141 lastname = 'Ota'
Pg. 145
Akhtar
Akhtar 2334
2334
Barr
Barr 5678
5678
Con
2534
Con
2534
Funk
Funk 1334
1334
Funk
Funk 1534
1534
...
...
...
...
Pg. 100

sta es una diapositiva


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

raz

ndice agrupado

Explicacin previa

Sugerencia

indid = 1

...
...
...
...
...
...
...
...
...
...
...
...

Ganio
Ganio 7678
7678
Hall
8078
Hall
8078
Jones
Jones 2434
2434
Jones
Jones 5978
5978
Jones
Jones 2634
2634
...
...
...
...
Pg. 110

...
...
...
...
...
...
...
...
...
...
...
...

Martin
Martin 1234
1234
Martin
Martin 7778
7778
Ota
5878
Ota
5878
Phua
Phua 7878
7878
Rudd
Rudd 6078
6078
...
...
...
...
Pg. 120

...
...
...
...
...
...
...
...
...
...
...
...

Smith
Smith 1434
1434
Smith
Smith 5778
5778
Smith
Smith 7978
7978
White
White 2234
2234
White
White 1634
1634
...
...
...
...
Pg. 130

...
...
...
...
...
...
...
...
...
...
...
...

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

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

sysindexes

raz
No situadas
en el nivel
de hoja

Aaron
Aaron
...
...
Jose
Jose
Aaron
Aaron

Jose
Jose

SELECT
lastname,
phone
SELECT
lastname, firstname,
firstname,
phone
Deanna
Nina
Deanna
Nina
FROM
member

member

FROM
WHERE
WHERE firstname
firstname == 'Mike'
'Mike'

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

Aaron
Aaron
Adam
Adam
Amie
Amie

Con
Con
Barr
Barr
Baldwin
Baldwin

Barr
Barr
Cox
Cox
Daum
Daum

Deanna
Deanna
Don
Don
Doug
Doug

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)

Barr
Barr
Kim
Kim
Nagata
Nagata
OMelia
OMelia

ndice agrupado
para Last Name

sta es una diapositiva


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

indid = 2

ndice no
agrupado
para
First Name

Explicacin previa

Sugerencia

id

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

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.

Explicacin previa

Esta seccin describe


cmo SQL Server mantiene
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

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
INSERT member
member (last
(last name)
name)
VALUES
VALUES lastname
lastname == Jackson'
Jackson'

Explicacin previa

No situadas
en el nivel
de hoja

Akhtar
Akhtar

Martin
Martin

Insertar una fila en una


pgina llena puede causar
la divisin de la misma.

Akhtar
Akhtar
Ganio
Ganio
Jackson

Lang
Lang
Smith
Smith

Nivel
Nivel de
de hoja
hoja

Sugerencia

sta es una diapositiva


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

Sugerencia

Seale que el ndice no


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

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)

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.

Diseo de ndices

21

Puntero de reenvo en un montn


Objetivo del tema

sysindexes

id

Describir el concepto de
un puntero de reenvo.

Explicacin previa

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

Si una fila de un montn


se hace demasiado grande
para su ubicacin original,
se mover a otra pgina.

indid = 2
Akhtar
Akhtar
...
...
Martin
Martin
Pg. 12 - Raz

member
member

raz

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

No situadas
en el nivel
de hoja

ndice no
agrupado

SET
Address
==
<something
long>
SETPg.
Address
<something
long>
Pg. 41
51
Pg.
61
Pg. 71
Nivel de hoja
WHERE
==4:708:01
'Ota'
Akhtar
Ganio
4:709:01
(Valor (Valor
de clave)
de
4:706:01
4:709:01 Martin
4:708:01
4:706:03
Akhtar 4:706:01
Ganiolastname
Martin
Smith 4:706:03
WHERE
lastname
'Ota'Smith
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
Ota
Con 4:704:01
4:704:01 Jones
Jones 4:709:02
4:709:02 Ota
Ota 4:707:02
4:707:02 Smith
Smith 4:707:01
4:707:01
Funk
Funk 4:706:02
4:706:02 Jones
Jones 4:708:03
4:708:03 Phua
Phua 4:708:02
4:708:02 White
White 4:704:03
4:704:03
Funk
Funk 4:704:02
4:704:02 Jones
Jones 4:707:03
4:707:03 Rudd
Rudd 4:705:01
4:705:01 White
White 4:705:02
4:705:02
Montn
Pg. 704
01 ... Conn
02 ... Funk
03 ... White
... ... ...
... ... ...
File ID #4

Sugerencia

sta es una diapositiva


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

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

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

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

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.

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

Explicacin previa

Cmo SQL Server reclama espacio

Cmo se pueden reducir los archivos

Cuando una fila se elimina,


tanto el ndice como las
pginas de datos cambian.

Las pginas de ndice agrupadas se desplazan como una unidad

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

El diseo de ndices tiles


es uno de los aspectos
ms importantes en la
mejora del rendimiento
de las consultas.

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

Explicacin previa

Antes de crear un ndice,


debe tener una profunda
compresin de los datos.

El diseo lgico y fsico

Las caractersticas de los datos

Cmo se utilizan los datos


z

Los tipos de consultas realizadas

La frecuencia de las consultas ms tpicas

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.

Explicacin previa

Al crear un ndice, considere


la naturaleza del entorno y
cmo se distribuirn los
datos.

Columnas adecuadas para indizar


z

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


z

Se incluyen con poca frecuencia en consultas

Contienen pocos valores nicos

Se definen con los tipos de datos text, ntext o image

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

Pregunta: Pueden
indizarse todas las
columnas?

Cree ndices basados en las columnas buscadas con frecuencia, por ejemplo:

Claves principales.

Respuesta: S, pueden
indizarse todas las
columnas, pero hacerlo
resultara poco eficiente.

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

Explicacin previa

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

Indique a los alumnos


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

Un ndice agrupado con una columna de identidad


mantiene las pginas actualizadas en memoria

Ordenacin
z

Sugerencia

Tablas continuamente actualizadas

Un ndice agrupado mantiene los datos preordenados

Longitud de columna y tipo de datos


z

Limita el nmero de columnas

Reduce el nmero de caracteres

Utiliza los tipos de datos ms pequeos posibles

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

Explicacin previa

Escritura de buenos argumentos de bsqueda

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.

z
z

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

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

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

Alta selectividad

member_no
member_no last_name
last_name first_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
..
FROM member
member
WHERE
WHERE member_no
member_no >> 8999
8999
..
10000
Anderson
Bill
10000
Anderson
Bill

Presentar el concepto
de selectividad.

Explicacin previa

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

Baja selectividad

member_no
member_no last_name
last_name first_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
..
FROM member
member
WHERE
WHERE member_no
member_no << 9001
9001
..
10000
Anderson
Bill
Anderson
Bill
10000

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

Ejemplo 1

32

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
last_name first_name
first_name
Randall
Joshua
Randall
Joshua
..
..

Explicacin previa

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.

..
Randall
Randall
Randall
Randall

Cynthia
Cynthia
Tristan
Tristan

..
..
..
Ota
Ota
..

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

Baja densidad
Lani
Lani

SELECT
SELECT **
FROM
FROM member
member
WHERE
WHERE last_name
last_name == Ota
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


Objetivo del tema

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

Distribucin estndar de valores

Nmero
de
Last Names

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.

A-E

F-J

K-O
P-U
Last Name

V-Z

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

Sugerencia

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

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

También podría gustarte