Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

necesito una aclaración con unos index en MySQL!!!

Estas en el tema de necesito una aclaración con unos index en MySQL!!! en el foro de Mysql en Foros del Web. Hola a todos!!! Bueno es que tengo una duda con los index de esta tabla: tabla1 Código: CREATE TABLE caracteristicas ( usr_id INT(10) NOT NULL, ...
  #1 (permalink)  
Antiguo 05/10/2005, 07:50
Avatar de JALF  
Fecha de Ingreso: septiembre-2004
Ubicación: Cali - Colombia
Mensajes: 634
Antigüedad: 19 años, 7 meses
Puntos: 2
Pregunta necesito una aclaración con unos index en MySQL!!!

Hola a todos!!!
Bueno es que tengo una duda con los index de esta tabla:

tabla1
Código:
CREATE TABLE caracteristicas (
  usr_id INT(10) NOT NULL,
  nombre VARCHAR(80) NOT NULL,
  apellidos VARCHAR(80) NOT NULL,
  correo VARCHAR(80) NOT NULL,
  edad INT(2) NOT NULL,
  genero CHAR(1) NOT NULL,
  fecha_nacimiento DATE NULL,
  fecha_ingreso DATE NOT NULL,
  dep_id INT(3) NOT NULL,
  ciud_id INT(3) NOT NULL,
  busco INT(1) NOT NULL,
  soporte_correo INT(1) NULL,
  PRIMARY KEY(usr_id),
  INDEX caracteristicas_FKIndex1(usr_id),
  INDEX caracteristicas_FKIndex2(dep_id),
  INDEX caracteristicas_FKIndex3(ciud_id),
  INDEX caracteristicas_edad(edad, genero, busco)
)
TYPE=InnoDB;
tabla2
Código:
CREATE TABLE caracteristicas (
  usr_id INT(10) NOT NULL,
  nombre VARCHAR(80) NOT NULL,
  apellidos VARCHAR(80) NOT NULL,
  correo VARCHAR(80) NOT NULL,
  edad INT(2) NOT NULL,
  genero CHAR(1) NOT NULL,

  fecha_nacimiento DATE NULL,
  fecha_ingreso DATE NOT NULL,
  dep_id INT(3) NOT NULL,
  ciud_id INT(3) NOT NULL,
  busco INT(1) NOT NULL,
  soporte_correo INT(1) NULL,
  PRIMARY KEY(usr_id),
  INDEX caracteristicas_FKIndex1(usr_id),
  INDEX caracteristicas_FKIndex2(dep_id),
  INDEX caracteristicas_FKIndex3(ciud_id),
  INDEX caracteristicas_edad(edad),
  INDEX caracteristicas_genero(genero),
  INDEX caracteristicas_busco(busco)
)
TYPE=InnoDB;
En la tabla 1 tengo los index en edad, los otros son de llaves foraneas, y en la tabla 2, tengo los index separados edad, genero, busco.

Mi duda es ¿¿Cual es mejor y por que?? ó ¿¿Todas dos es lo mismo?? y ¿¿Qué diferencias hay de la una a la otra??

De antemano muchas gracias!!
__________________
Ubuntu User # 15554
http://dubaiphp.wordpress.com/ -Mi vida de desarrollo, juegos y algo más en un Blog-
  #2 (permalink)  
Antiguo 05/10/2005, 12:35
Avatar de haron  
Fecha de Ingreso: febrero-2004
Ubicación: Cádiz (refinitivo)
Mensajes: 632
Antigüedad: 20 años, 2 meses
Puntos: 3
bueno, en mysql, los indices pueden servir para varias cosas:

1. para acceder a la informacion mas rapidamente:
Código:
select *
from clientes
where nombre = "manolo"
funcionara mas rapido si has definido sobre la columna "nombre" un indice.

2. para crear campos no repetidos:

si en el "nombre" de la tabla anterior creas un indice unico (UNIQUE) tendras la certeza que los valores en este campo no se repiten.

3. para hacer integridad referencial:

imaginate que tienes una segunda tabla (llamemosla "caracteristicas_2") con los siguientes campos: "edad", "genero" y "busco". de manera que estos tres campos forman una clave primaria.

ademas, tu tabla "caracteristicas" hace referencia a esta segunta tabla a traves de los mismos campos ("edad", "genero" y "busco"). entonces NECESITARAS CREAR UN INDICE SOBRE ESTOS TRES CAMPOS A LA VEZ, NO DE FORMA SEPARADA y definir la integridad referencial.

espero haberte ayudado en algo.
__________________
Si ocurre algo importante, estamos afuera fumándonos unos cigarritos.
  #3 (permalink)  
Antiguo 05/10/2005, 21:41
Avatar de JALF  
Fecha de Ingreso: septiembre-2004
Ubicación: Cali - Colombia
Mensajes: 634
Antigüedad: 19 años, 7 meses
Puntos: 2
hola que tal!!!
pues a ver si te entendi:

Como edad, genero y busco, son campos propios de la tabla, y no son llaves primarias, entonces debo de crear un index individual para cada uno?!!
__________________
Ubuntu User # 15554
http://dubaiphp.wordpress.com/ -Mi vida de desarrollo, juegos y algo más en un Blog-
  #4 (permalink)  
Antiguo 06/10/2005, 04:49
Avatar de haron  
Fecha de Ingreso: febrero-2004
Ubicación: Cádiz (refinitivo)
Mensajes: 632
Antigüedad: 20 años, 2 meses
Puntos: 3
en principio no tienes porque crear indices, a no ser que sean necesarios.

si tu tabla va a crecer mucho y es habitual que se hagan consultas a traves de esos campos, entonces es conveniente crear un indice individual sobre cada campo.

pero un indice tambien supone una carga adicional para el servidor. el hecho que las consultas sobre los campos indexados sean mas rapidas tiene un precio:

cuando insertas o eliminas un registro en la tabla debe actualizarse el indice, lo que supone un lapso de tiempo en el servidor, que puede incrementarse drasticamente si las operaciones de insercion o edicion son frecuentes.

por eso mi recomendacion es:

crea un indice individual sobre esos campos si crees que es necesario (tabla muy grande y constantes busquedas sobre los campos que mencionas).
__________________
Si ocurre algo importante, estamos afuera fumándonos unos cigarritos.
  #5 (permalink)  
Antiguo 06/10/2005, 08:09
Avatar de JALF  
Fecha de Ingreso: septiembre-2004
Ubicación: Cali - Colombia
Mensajes: 634
Antigüedad: 19 años, 7 meses
Puntos: 2
Bueno la verdad, la tabla tiene consultas a diario y son bastantes consultas, tambien tiene inserciones y modificaciones a diario pero no tiene eliminación, o de pronto se elimina pero eso es muy eventual

La cosa es que se consulta mucho y también se inserta y se modifica mucho, y para acabar de completar, también es muy grande.

Pues la verdad la tabla hace parte una DB que estoy diseñando para una web de realaciones personales, entonces con ese pequeño dato, ya te puedes imaginar la grandeza de la tabla!!!

Pero.... me imagino entonces que habria que hacerle indices o que me aconsejas???
__________________
Ubuntu User # 15554
http://dubaiphp.wordpress.com/ -Mi vida de desarrollo, juegos y algo más en un Blog-
  #6 (permalink)  
Antiguo 06/10/2005, 09:39
Avatar de haron  
Fecha de Ingreso: febrero-2004
Ubicación: Cádiz (refinitivo)
Mensajes: 632
Antigüedad: 20 años, 2 meses
Puntos: 3
crea los indices
__________________
Si ocurre algo importante, estamos afuera fumándonos unos cigarritos.
  #7 (permalink)  
Antiguo 07/10/2005, 13:42
Avatar de JALF  
Fecha de Ingreso: septiembre-2004
Ubicación: Cali - Colombia
Mensajes: 634
Antigüedad: 19 años, 7 meses
Puntos: 2
una ultima cosita y no te molesto más!!!
como creo los index???
así:

INDEX caracteristicas_edad(edad, genero, busco)

ó así:

INDEX caracteristicas_edad(edad),
INDEX caracteristicas_genero(genero),
INDEX caracteristicas_busco(busco)

__________________
Ubuntu User # 15554
http://dubaiphp.wordpress.com/ -Mi vida de desarrollo, juegos y algo más en un Blog-
  #8 (permalink)  
Antiguo 09/10/2005, 11:51
Avatar de haron  
Fecha de Ingreso: febrero-2004
Ubicación: Cádiz (refinitivo)
Mensajes: 632
Antigüedad: 20 años, 2 meses
Puntos: 3
de la ultima forma
__________________
Si ocurre algo importante, estamos afuera fumándonos unos cigarritos.
  #9 (permalink)  
Antiguo 09/10/2005, 20:27
Avatar de JALF  
Fecha de Ingreso: septiembre-2004
Ubicación: Cali - Colombia
Mensajes: 634
Antigüedad: 19 años, 7 meses
Puntos: 2
De acuerdo

Bueno!!!
muchas, pero muchas gracias!!!
__________________
Ubuntu User # 15554
http://dubaiphp.wordpress.com/ -Mi vida de desarrollo, juegos y algo más en un Blog-
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:55.