Está en la página 1de 8

INDICES.

El ndice de una base de datos es una estructura de datos que mejora la velocidad de las
operaciones, por medio de identificador nico de cada fila de una tabla, permitiendo un rpido
acceso a los registros de una tabla en una base de datos. Al aumentar drsticamente la
velocidad de acceso, se suelen usar, sobre aquellos campos sobre los cuales se hacen
frecuentes bsquedas.
El ndice tiene un funcionamiento similar al ndice de un libro, guardando parejas de
elementos: el elemento que se desea indexar y su posicin en la base de datos. Para buscar
un elemento que est indexado, slo hay que buscar en el ndice dicho elemento para, una
vez encontrado, devolver el registro que se encuentre en la posicin marcada por el ndice.
Los ndices pueden ser creados usando una o ms columnas, proporcionando la base tanto
para bsquedas rpidas al azar como de un ordenado acceso a registros eficiente.
Los ndices son construidos sobre rboles B, B+, B* o sobre una mezcla de ellos, funciones de
clculo u otros metodos.
El espacio en disco requerido para almacenar el ndice es tpicamente menor que el espacio
de almacenamiento de la tabla (puesto que los ndices generalmente contienen solamente los
campos clave de acuerdo con los que la tabla ser ordenada, y excluyen el resto de los
detalles de la tabla), lo que da la posibilidad de almacenar en memoria los ndices de tablas
que no cabran en ella. En una base de datos relacional un ndice es una copia de una parte
de la tabla.
Algunas bases de datos amplan la potencia del indexado al permitir que los ndices sean
creados de funciones o expresiones. Por ejemplo, un ndice puede ser creado sobre la
funcin upper(apellido) , que almacenara en el ndice solamente las versiones maysculas del
campo apellido. Otra opcin a veces soportada, es el uso de ndices "filtrados", donde las
entradas del ndice son creadas solamente para los registros que satisfagan una cierta
expresin condicional. Un aspecto adicional de flexibilidad es permitir la indexacin
en funciones definidas por el usuario, tambin como expresiones formadas de un surtido de
funciones incorporadas. Todos estos refinamientos de la indexacin son soportados en Visual
FoxPro y otros lenguajes de programacin, por ejemplo.
1

Los ndices pueden ser definidos como nicos o no nicos. Un ndice nico acta como una
restriccin en la tabla previniendo filas idnticas en el ndice.




Dijimos que el objetivo de un indice es acelerar la recuperacin de informacin y que es
til cuando la tabla contiene miles de registros, cuando se realizan operaciones de
ordenamiento y agrupamiento, etc.
Es importante identificar el o los campos por los que sera til crear un ndice, aquellos
campos por los cuales se realizan bsquedas con frecuencia: claves primarias, claves
externas o campos que combinan tablas.
No se recomienda crear ndices sobre campos que no se usan con frecuencia en
consultas o en tablas muy pequeas.
Para crear ndices empleamos la instruccin "create index".

La sintaxis bsica es la siguiente:
create TIPOdeINDICE index NOMBREINDICE
on NOMBRETABLA(CAMPOS);
Los ndices pueden ser: no nicos (los valores pueden estar repetidos) o nicos (los
valores no pueden duplicarse). De modo predeterminado, si no se especifica el tipo de
ndice, se crea uno no nico.
En el siguiente ejemplo creamos un ndice nico sobre el campo "documento" de la tabla
"empleados":
create unique index I_empleados_documento
on empleados(documento);
Para identificar los ndices fcilmente, podemos agregar un prefijo al nombre del ndice,
por ejemplo "I" y luego el nombre de la tabla y/o campo.
Si se intenta crear un ndice nico para un campo que tiene valores duplicados, Oracle no
lo permite.
Los campos de tipo "long" y "long raw" no pueden indexarse.
Una tabla puede indexarse por un campo (o varios).
Creamos un ndice compuesto para los campos "apellido" y "nombre":
create index I_empleados_apellidonombre
on empleado(apellido,nombre);
Cuando creamos una restriccin "primary key" o "unique" sobre una tabla, Oracle
automticamente crea un ndice sobre el campo (o los campos) de la restriccin y le da el
mismo nombre que la restriccin. En caso que la tabla ya tenga un ndice, Oracle lo usa,
no crea otro.
Para obtener informacin sobre los ndices podemos consultar varios diccionarios.
1) "user_indexes": nos muestra las siguientes columnas (entre otras que no
analizaremos):
- INDEX_NAME (nombre del ndice),
- INDEX_TYPE (tipo de ndice, nosotros crearemos el stardart normal),
- TABLE_NAME (nombre de la tabla),
- UNIQUENESS (si es nico o no).
2) "user_ind_columns": nos muestra las siguientes columnas (entre otras que no
analizaremos):
- INDEX_NAME (nombre del ndice),
- TABLE_NAME (nombre de la tabla),
- COLUMN_NAME (nombre del campo),
- COLUMN_POSITION (posicin del campo),
3) "user_objects": en la columna "OBJECT_TYPE" muestra "index" si es un ndice.
4) "user_constraints": si la restriccin tiene un ndice asociado, aparece su nombre en la
columna "INDEX_NAME".
















Crear ndices (motor de base
de datos)
En este tema se describen las principales tareas de creacin de ndices y se proporcionan las
directrices de rendimiento e implementacin que hay que tener en cuenta antes de crear un ndice.
Tareas de creacin de ndices
Las siguientes tareas forman parte de la estrategia recomendada para crear ndices:
1. Disear el ndice.
El diseo de ndices es una tarea crtica. El diseo de ndices incluye la determinacin de
las columnas que se utilizarn, la seleccin del tipo de ndice (por ejemplo, agrupado o no
agrupado), la seleccin de opciones de ndice adecuadas y la determinacin de grupos de
archivos o de la ubicacin de esquemas de particin. Para obtener ms informacin,
vea Disear ndices.
2. Determinar el mejor mtodo de creacin. Los ndices se crean de las siguientes maneras:
o Definiendo una restriccin PRIMARY KEY o UNIQUE en una columna mediante
CREATE TABLE o ALTER TABLE
SQL Server Database Engine (Motor de base de datos de SQL Server) crea
automticamente un ndice nico para hacer cumplir los requisitos de unicidad de
una restriccin PRIMARY KEY o UNIQUE. De forma predeterminada se crea un
ndice clster nico para hacer cumplir una restriccin PRIMARY KEY, a menos
que ya exista un ndice clster en la tabla o que usted especifique un ndice no
clster nico. De forma predeterminada se crea un ndice nico no clster para
hacer cumplir una restriccin UNIQUE a menos que se especifique de
explcitamente un ndice clster nico y no exista un ndice clster en la tabla.
Tambin se pueden especificar las opciones de ndice, la ubicacin del ndice, el
grupo de archivos o el esquema de la particin.
Un ndice creado como parte de una restriccin PRIMARY KEY o UNIQUE recibe
automticamente el mismo nombre que la restriccin. Para obtener ms
informacin, vea Restricciones PRIMARY KEY y Restricciones UNIQUE.
o Creando un ndice independiente de una restriccin utilizando la instruccin
CREATE INDEX , o el cuadro de dilogo Nuevo ndice en el Explorador de
objetos de SQL Server Management Studio
Debe especificar el nombre del ndice, de la tabla y de las columnas a las que se
aplica el ndice. Tambin se pueden especificar las opciones de ndice, la
ubicacin del ndice, el grupo de archivos o el esquema de la particin. De forma
predeterminada, se crea un ndice que no es nico y no est agrupado si no se
especifican las opciones nicas o agrupadas. Para crear un ndice filtrado, use la
clusula opcional WHERE. Para obtener ms informacin, vea Directrices
generales para disear ndices filtrados.
3. Crear el ndice.
Un factor importante que debe tenerse en cuenta es si el ndice se crear en una tabla
vaca o en una tabla con datos. La creacin de un ndice en una tabla vaca no tiene
implicaciones de rendimiento en el momento de creacin del ndice; sin embargo, el
rendimiento se ver afectado cuando se agreguen los datos a la tabla.
La creacin de ndices en tablas grandes debe planearse con cuidado para que el
rendimiento de la base de datos no se vea afectado. La mejor manera de crear ndices en
tablas de gran tamao es empezar con el ndice clster y, a continuacin, generar los
ndices no clster. Considere la posibilidad de establecer la opcin ONLINE en ON cuando
cree ndices en tablas existentes. Cuando se establece en ON, los bloqueos a largo plazo
no se retienen, lo que permite que continen consultas o actualizaciones a la tabla
subyacente. Para obtener ms informacin, vea Realizar operaciones de ndices en lnea.
Consideraciones de implementacin
En la siguiente tabla se enumeran los valores mximos que se aplican a los ndices clster, no
clster, espaciales, filtrados y XML. A menos que se especifique lo contrario, las limitaciones se
aplican a todos los tipos de ndices.
Lmites de ndice mximos Valor Informacin adicional
ndices clster por tabla 1
ndices no clster por tabla 999 Incluye ndices no clster creados por restricciones PRIMARY KEY o UNIQUE e
ndices filtrados, pero no ndices XML.
ndices XML por tabla 249 Incluye ndices XML principales y secundarios en columnas de tipos de datos xml.
ndices en columnas del tipo de datos XML
ndices espaciales por tabla 249 Trabajar con ndices espaciales (motor de base de datos)
Nmero de columnas de clave
por ndice
16* El ndice clster est limitado a 15 columnas si la tabla tambin contiene un ndice
XML principal o un ndice espacial.
Tamao mximo de las claves de ndices.
Tamao del registro de clave
de ndice
900
bytes*
No se aplica a ndices XML ni a ndices espaciales.
Para que una tabla admita el uso de ndices espaciales, el tamao mximo del
registro de clave de ndice es de 895 bytes.
Tamao mximo de las claves de ndices.
*Puede evitar limitaciones de tamao de registro y de columna de clave de ndice de ndices no
clster incluyendo columnas sin clave en el ndice. Para obtener ms informacin, vea ndice con
columnas incluidas.
Tipos de datos
Generalmente, se puede indizar cualquier columna de una tabla o de una vista. En la siguiente
tabla se muestran todos los tipos de datos que tienen una participacin de ndice restringida.
Tipo de datos Participacin de ndice
Informacin
adicional
Tipo definido por el usuario CLR Se puede indizar si el tipo
admite el orden binario.
Trabajar con
tipos definidos
por el usuario
para CLR
Tipos de datos de objetos grandes
(LOB): image, ntext,text, varchar(max),nvarchar(max),varbinary(max) y xml
No pueden ser una columna
de clave de ndice. No
obstante, una
columna XML puede ser una
columna de clave en una
tabla o en un ndice XML
secundario o principal.
Pueden participar como
columnas sin clave (incluidas)
en un ndice no clster,
excepto image, ntext y text.
Pueden participar si son parte
de una expresin de columna
calculada.
ndice con
columnas
incluidas
ndices en
columnas del
tipo de datos
XML
Columnas calculadas No se pueden indizar. Esto
incluye columnas calculadas
definidas como invocaciones
de mtodos de una columna
del tipo definido por un
usuario CLR, mientras los
mtodos se marquen como
deterministas.
Las columnas calculadas que
se derivan de tipos de datos
LOB se pueden indizar como
columna con clave o sin clave
mientras el tipo de datos de
columna calculada se permita
como columna de clave de
ndice o columna sin clave.
Crear ndices
en columnas
calculadas
Columnas de Varchar de insercin no consecutiva La clave de ndice de un
ndice clster no puede
contener
columnas varchar con datos
existentes en la unidad de
asignacin
ROW_OVERFLOW_DATA. Si
un ndice clster se crea en
una columna varchar y los
datos existentes estn en la
unidad de asignacin
Organizacin de
tablas e ndices
Datos de
desbordamiento
de fila
superiores a 8
KB
IN_ROW_DATA, las acciones
de insercin o actualizacin
posteriores de la columna que
constituiran inserciones no
consecutivas producirn un
error.
Geometry Se puede indizar con varios
ndices espaciales.
Tipos de datos
espaciales
Consideraciones adicionales
A continuacin se ofrecen algunas consideraciones adicionales para crear un ndice:
Puede crear un ndice si tiene el permiso CONTROL o ALTER en la tabla.
Cuando se crea, el ndice se habilita automticamente y est disponible para su uso.
Puede quitar el acceso a un ndice deshabilitndolo. Para obtener ms informacin,
vea Deshabilitar ndices.
Requisitos de espacio en disco
El espacio en disco necesario para almacenar el ndice depende de los siguientes factores:
El tamao de cada fila de datos de la tabla y el nmero de filas por pgina. As se
determina el nmero de pginas de datos que se deben leer del disco para crear el ndice.
Las columnas del ndice y los tipos de datos utilizados. As se determina el nmero de
pginas de ndice que se deben escribir en disco. Para obtener ms informacin,
vea Estimar el tamao de un ndice clster y Estimar el tamao de un ndice no clster.
Espacio temporal en disco necesario durante el proceso de creacin del ndice. Para
obtener ms informacin, vea Determinar requisitos de espacio en disco del ndice.
Consideraciones de rendimiento
El tiempo que ocupa la creacin fsica de un ndice depende en gran medida del subsistema de
disco. Los factores importantes que se deben tener en cuenta son:
El modelo de recuperacin de la base de datos. El modelo de recuperacin optimizado
para cargas masivas de registros proporciona un rendimiento mucho mayor y un consumo
de espacio de registro ms reducido que la recuperacin completa durante la operacin de
creacin del ndice. Sin embargo, la recuperacin por medio de registros de operaciones
masivas reduce la flexibilidad para la recuperacin a un momento dado. Para obtener ms
informacin, vea Elegir un modelo de recuperacin para las operaciones de ndice.
RAID (matriz redundante de discos econmicos) utilizada para almacenar los archivos de
base de datos y del registro de transacciones. Normalmente, los niveles de RAID que
utilizan la creacin de bandas tienen un ancho de banda de E/S mejor.
Nmero de discos de la matriz de discos, si se utiliza RAID. Ms unidades en la matriz
aumentan las tasas de transferencia de datos proporcionalmente.
Dnde se almacenan las ordenaciones intermedias de los datos. Si utiliza la opcin
SORT_IN_TEMPDB puede reducir el tiempo necesario para crear un ndice
cuandotempdb se encuentra en un conjunto de discos diferente que la base de datos del
usuario. Para obtener ms informacin, vea tempdb y la creacin de ndices.
Creacin del ndice en lnea o sin conexin.
Cuando se crea un ndice sin conexin (valor predeterminado), los bloqueos exclusivos se
mantienen en la tabla subyacente hasta que la transaccin que crea el ndice se ha
completado. La tabla no est accesible para los usuarios mientras se crea el ndice.
Excepto en el caso de los ndices XML y los ndices espaciales, es posible especificar que
se cree el ndice en lnea. Cuando la opcin en lnea est establecida en ON, los bloqueos
de la tabla a largo plazo no se conservan, lo que permite que las consultas o
actualizaciones a la tabla subyacente continen mientras se crea el ndice. Aunque
recomendamos operaciones de ndice en lnea, se debe evaluar el entorno y los requisitos
especficos. Puede ser mejor ejecutar operaciones de ndice sin conexin. Al hacerlo as,
los usuarios tienen acceso restringido a los datos durante la operacin, pero la operacin
acaba con mayor rapidez y utiliza menos recursos. Para obtener ms informacin,
vea Realizar operaciones de ndices en lnea.

También podría gustarte