Me gustaría, si es posible, que alguien arrojase luz sobre este asunto. En especial, considerando responder los siguientes apartados. 1- Qué es un indice y para que sirve? 2- Cómo elegir el campo indice? 3- Cuando usar un indice simple y cuando uno multiple? 4- Qué ocurre si nos equivocamos de indice (en que influye la indexación de una tabla)? Respuesta de CarCar: ==================== Hola: > 1- Qué es un indice y para que sirve? Un índice es un objeto asociado a una tabla que permite acceder MUCHO más rapidamente a los datos de la tabla cuando se necesita acceder a ella por ese índice. Es decir, si tú en una tabla de clientes, creas un índice sobre el campo "Nombre", cuando tengas que acceder, bien en un informe, formulario o consulta y se necesite que los datos salgan clasificados alfabéticamente, si existe un índice para ese campo, la consulta será MUCHO más rápida y eficiente. Los índices, por lo tanto, sirven fundamentalmente para acelerar el proceso de las tablas cuando se necesita cierta ordenación. Sólo comprobarás este aumento de velocidad en los equipos modernos cuando tengas un número muy alto de registros en las tablas, para 100, 200 o 1000 registros te parecerá que la velocidad es la misma. Además puedes hacer que los campos que componen un índice sean campos clave de una tabla, en éste caso el índice te sirve para tener identificados los registros y que sea el propio Access el que se encargue de la comprobación de que los registro sean únicos por los campos de clave. > 2- Cómo elegir el campo indice? Los índices no se componen de un campo, los índices están basados en uno o más campos, según para lo que se deseen, no debes confundir el concepto de "campo de clave" o "clave principal" con el concepto índice, puedes tener perfectamente índices que no sean "claves" o "campo índice". Lo que te quiero decir es que parece que tienes un error de concepto y confundes y mezclas índices y claves (o identificadores). Todas las tablas suelen tener uno o varios campos por los que los registros son únicos dentro de ellas y, habitualmente se crean índices con esos campos. > 3- Cuando usar un indice simple y cuando uno multiple? Perogrullada al canto: Siempre que sea necesario. Por ejemplo en una tabla de empleados en los que cada uno de ellos tiene un NIF, puedes utilizar ese campo como campo clave único, y crear un índice principal para él (Un índice principal no permite que existan valores duplicados). En unas tablas de Facturas de Clientes, es normal tener un campo Año de factura y un campo Numero de factura, con ambos se identifica cada una de las facturas, en ese caso deberías crear la clave principal de esa tabla utilizando ambos campos. Hay que tener en cuenta que desde el momento en que en Access defines unos campos como clave principal automáticamente se crea un índice por ellos, de ahí viene a veces confundir índices con campos de clave. Las facturas suelen tener líneas de facturas y en esa tabla lo lógico sería tener 3 campos de clave: Año, Número y Número de Lïnea (o código de artículo). Fíjate que dependiendo de las necesidades del programa, sería interesante montar más índices en la tabla de Clientes... uno que sólo tenga el campo "Nombre de Cliente" para informes alfabéticos, otro por Provincia y Localidad (y sería un índice múltiple), si se va a realizar algún tipo de informe por esos valores... > 4- Qué ocurre si nos equivocamos de indice (en que influye la indexación de > una tabla)? La indexación de una tabla influye, por ejemplo, en los procesos de adición de registros, cada vez que se añade un registro, Access tiene que actualizar todos y cada uno de los índices para mantenerlos al día, luego si existen 20 índices distintos creados en una tabla, este proceso se ralentiza. (En los ordenadores actuales esto prácticamente no tiene importancia, debido a la tremenda velocidad a la que trabajan procesadores, líneas y discos duros). También influye y es dónde se nota más, cuando haces un duplicado de una tabla que contenga muchos registros (del orden de decenas o cientos de miles) y muchos índices, al copiar los datos se deben de regenerar los índices y éste proceso no es arítmetico, sino geométrico, reconstruir un índice para una tabla del doble de registros no tarda el doble, sino más, a veces bastante más. ==================================== OTRA RESPUESTA DE VICTOR DELGADILLO= ==================================== Los indices son una forma que tienen los administradores de database (DBM), incluyendo Access, para buscar rapidamente valores de una tabla. Cuando los usuarios alimentan informacion sobre una tabla, generalmente se hace en forma aleatoria, y no en ningun orden especifico. Hay basicamente dos clases de indices: el primario (que es el que identifica los registros de la tabla) y generalmente es de entrada unica y los secundarios (que los crea el usuario o el sistema segun sea necesario). Un ejemplo es una tabla de clientes. El Numero de Cliente sera en este caso el indice primario (cada cliente tiene su numero unico). Este indice primario es el que tambien se utiliza para relacionar la informacion de otras tablas. Pero tambien es usual buscar clientes por apellido. En este caso, si se crea una consulta donde se solicita un apellido en particular, Access crea un indice temporal y busca los apellidos solicitados. Pero esta busqueda se hace mas rapida si el indice ya existe! Por lo tanto, es util crear un indice secundario basado en el Apellido & Nombre del cliente. Asi la busqueda evita tener que hacer el indice temporal. Los indices tambien pueden abarcar mas de un solo campo. Ejemplo es el del cliente, cuyo indice puede ser Apellido y Nombre (ambos en un solo indice). Asi, es mas rapido buscar a Gonzalez, Juan y Gonzalez, Pedro ya que ambos estan en el mismo indice. Una vez creados los indices (primario y secundarios) Access (o cualquier otro DBM) los mantiene automaticamente (generalmente, al ingresar un nuevo registro, los indices se actualizan automaticamente). Indices de poco uso es preferible crear temporales, ya que el mantenimiento de los indices tambien absorbe tiempo de procesamiento. Por ejemplo, si se desea un reporte en orden descendiente de cantidades. No seria practico mantener un indice de estos valores. Hay que recordar que el tiempo que se ahorra al generar reportes y consultas con indices previos, en parte se paga al momento de actualizar los indices. Por eso hay que tambien evitar tener m uchos indices en una tabla.