Ver Mensaje Individual
  #2 (permalink)  
Antiguo 16/05/2003, 04:08
Avatar de sci-fi
sci-fi
 
Fecha de Ingreso: marzo-2002
Mensajes: 157
Antigüedad: 22 años, 1 mes
Puntos: 0
hola,

andaba en eso también estos días... y la verdad que no pude encontrar, al menos hasta el momento, ningún material que explicara claramente y desde cero qué son los índices y cómo mejor usarlos.

Pero de lo que encontré, saqué en claro esto: los índices serían como un índice de los que hay en los libros. El índice de los capítulos, o el índice de determinadas palabras (creo que esto se llama 'glosario', donde aparecen determinadas palabras y el número de páginas donde son mencionadas en el libro).

Entonces, cuando uno necesita buscar el libro, sobre determinado tema, supongamos 'pelícanos': en lugar de leer todo el libro desde cero buscando esa parte donde se hablaba de pelícanos, uno va directamente al índice o glosario y busca pelícano en la leta P; ahí figura el número de página/s donde aparece, y va directamente ahí. Lo mismo haría la base de datos: en lugar de relevar *toda* la tabla en busca de determinado registro, va al índice que pueda usar para ese campo que tiene que buscar, y se fija ahí antes en lugar de buscar *toda* la tabla...

La idea es que te conviene usar índices en aquéllos campos *más usados* de la tabla, por ejemplo para JOINs, o WHEREs. La clave única no es problema, esa siempre se define para campos del tipo ID. Pero después se puede definir un índice no-único combinando campos. Por ej. supongamos que hay una tabla clientes. ID es la clave principal. Pero si usas muchas consultas utilizando el nombre de los clientes, te convendría crear un índice que combine el campo ID más el campo que contiene el nombre del cliente. También si utilizas muchos JOINs con otras tablas, por ejemplo una tabla 'productos', que utilice frecuentemente JOIN's con la tabla de clientes, para esos JOINs vas a tener, usualmente, determinados campos que más utilices: un campo ID, el mismo campo que contenga el nombre.

bueno ya se me hizo muy largo...

de todas maneras, podes usar la clausula EXPLAIN (creo que esto es específico de MySQL). Por ejemplo, para un consulta 'SELECT clientes.id, clientes.id_producto, productos.fecha_compra FROM clientes INNER JOIN productos ON productos.id = clientes.id_producto". Si se hace

EXPLAIN SELECT clientes.id, clientes.id_producto, productos.fecha_compra FROM clientes INNER JOIN productos ON productos.id = clientes.id_producto,

MySQL te va devolver unos campos temporales que explican si utilizaría posibles índices (y el nombre de los indices), si relevaría todos los campos de la tabla o no, etc...

saludos
__________________
webdeveloper
http://www.javascripters.com.ar/
diseño web y tecnología