Professional Documents
Culture Documents
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
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
Explicacin previa
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 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.
Diseo de ndices
Diseo de 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.
Diseo de ndices
Sugerencia
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 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
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
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
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
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
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
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
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
Explicacin previa
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
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
Diseo de ndices
18
Explicacin previa
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
Nivel de hoja
(Valor de clave agrupado)
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
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 explica cmo SQL Server mantiene ndices y montones al insertar, actualizar y eliminar filas.
Diseo de ndices
20
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.
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
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 ... ... ...
member member
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
Diseo de ndices
22
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 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 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.
Diseo de ndices
24
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
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
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
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.
Diseo de ndices
28
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
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.
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.
Diseo de ndices
29
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.
Diseo de ndices
30
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
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
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.
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
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).
Diseo de ndices
34
Diseo de ndices
35
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.
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.
Diseo de ndices
36
Sugerencia