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

Conviene usar 1 o 2 índices????

Estas en el tema de Conviene usar 1 o 2 índices???? en el foro de Bases de Datos General en Foros del Web. Si tengo una tabla del tipo InnoDB con los campos id,usuario,password,tipo Creao un índice para id que será la PRIMARY KEY, aunque también puede ser ...
  #1 (permalink)  
Antiguo 24/02/2005, 17:07
 
Fecha de Ingreso: febrero-2005
Mensajes: 66
Antigüedad: 19 años, 2 meses
Puntos: 0
Conviene usar 1 o 2 índices????

Si tengo una tabla del tipo
InnoDB con los campos

id,usuario,password,tipo

Creao un índice para id que será la PRIMARY KEY, aunque también puede ser el campo usuario, pero prefiero que no lo sea.
Aparte el campo usuario sera un índice de tipo UNIQUE y password será un índice común.
El campo tipo solo acepta 3 valores.

Mi preguntas son dos:

1- Me conviene crear un indice para el campo tipo a pesar de que los valores que van a tener serán pocos, solo 3 valores diferentes en toda la tabla????Aclaración: la tabla tendrá unos cuantos miles de registros.

2- Si creo índices separados para el campo usuario (UNIQUE) y password (INDEX común) y hago una consulta del tipo:
SELECT * FROM tabla WHERE usuario="pepe" AND password="clave" se utilizaran los dos índices o no??? O hay que hacer un índice compuesto con usuario y password???
  #2 (permalink)  
Antiguo 24/02/2005, 20:59
 
Fecha de Ingreso: febrero-2005
Mensajes: 66
Antigüedad: 19 años, 2 meses
Puntos: 0
Che, pongasnse las pilas y respondan los que les parescan, que yo a pesar de ser nuevito ya he ayudado bastante y seguire haciendolo. Pero por fa el que tenga idea que lo diga que lo necesito rapido.
  #3 (permalink)  
Antiguo 25/02/2005, 05:23
 
Fecha de Ingreso: agosto-2002
Mensajes: 230
Antigüedad: 21 años, 9 meses
Puntos: 1
1.- No creo que te convenga crear un índice para el campo tipo, ya que sería muy poco discriminatorio y al final el índice haría un full scan de la tabla aunque se utilizara el índice

2.- Cuando accedes a una tabla sólo lo puedes hacer por un índice, con lo que si creas dos índices distintos sólo utilizaría uno

Sólo un comentario: ¿para qué quieres crear un índice en password?No tiene mucho sentido ya que no sabes qué valores va a haber ahi y si va a ser un buen índice, además si el campo usuario es único ya tendrías identificado el registro, piénsalo pero no creo que fuera buena idea crear un índice para password, tanto por separado como combinándolo con el de usuario

Salu2
  #4 (permalink)  
Antiguo 25/02/2005, 05:48
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
Totalmente de acuerdo con Xaquin.
Nunca es bueno hacer un índice por un campo que tiene pocos valores posibles.
Si tienes un índice único por usuario, ¿para que quieres un índice por clave?.
¿Por qué te planteas el hacer un índice compuesto usuario clave?. Date cuenta que si lo haces así cualquier usuario podría repetirse con tal de que cambiara la clave, así podrías tener (pepe, hola), (pepe, hola1), (pepe, hola2) ...
Un saludo.

NOTA: Respondemos cuando podemos, vemos los mensajes y conocemos la respuesta. No puedes esperar respuestas rápidas, al igual que nadie espera respuestas rápidas tuyas. No tenemos dedicación exclusiva al foro, sino que esto es una afición y ayudar una vocación.
__________________
Estoy contagiado de Generación-I

Última edición por Vice; 25/02/2005 a las 05:50
  #5 (permalink)  
Antiguo 25/02/2005, 06:40
 
Fecha de Ingreso: febrero-2005
Mensajes: 396
Antigüedad: 19 años, 3 meses
Puntos: 1
por otro lado no deberias guardar los passwords en la base de datos, sino un digest de los mismos (md5, por ejemplo).

Tenerlos almacenados puede ser un problema de seguridad bastante importante.

Un saludo

Zerjillo
  #6 (permalink)  
Antiguo 25/02/2005, 12:26
 
Fecha de Ingreso: febrero-2005
Mensajes: 66
Antigüedad: 19 años, 2 meses
Puntos: 0
Primero aclaro que al decir que respondan, es porque muchos lo leian pero no respondian y necesitaba que me orienten un poquito al menos, aunque sea lo que opinaban, nada tecnico, pero bueno a veces soy medio apurado e impaciente... Asi que gracias a los que lo hicieron hoy.

Volviendo al tema. Tienen razon con lo que dicen del indice en el password, el único objetivo mío de crear un indice compuesto (usuario, password) es que directamente lea del indice el usuario y el password. Por lo que me dicem ustedes debería crear el indice UNIQUE para usuario y password hacer que lo lea directamente de la BD. Cierto. es asi no????
Por otro lado no entiendo bien eso de que

Cita:
Iniciado por xaquin
1.- No creo que te convenga crear un índice para el campo tipo, ya que sería muy poco discriminatorio y al final el índice haría un full scan de la tabla aunque se utilizara el índice

Salu2

Si creo el indice tipo, aunque tenga pocos valores, no sería beneficioso?? Que pasa si tengo que hacer una consulta que me liste todos los usuario del tipo 1. En ese caso los buscaría en el indice, y despues leería de la BD solo los usuario de ese tipo. O no estoy en lo correcto???? No entiendo porque me dicen que haría un full scan a toda la tabla (no sería solo a los usuario del tipo seleccionado???)

Y por ultimo como es eso de guardar los password en un digest de los mismos (md5 por ejemplo). Que es eso, me pueden aclarar un poco.
Gracias.
  #7 (permalink)  
Antiguo 28/02/2005, 02:14
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
Una cosa que siempre sucede es que el dato se lee de la base de datos, los índices se usan para buscar empleando las condiciones y para ordenaciones cuando se ordene según campos de índice.

Cuando tienes un campo de pocos valores posibles y muchas filas, es más eficiente leer la tabla que usar índice, pues vas a tener que leer el indice en todos sus niveles y después leer de la base de datos los registros seleccionados, lo cual lleva a un número de lecturas superior al de un rastreo de la tabla. Para explicarte bien porqué es así tendría que contarte como se organizan los índices (usando un B+árbol) y es un tanto largo.

Las passwords, por seguridad, no deberías guardarlas tal cual, sino encriptadas y, para eso, en mysql se usa la función password() o MD5(). Personalmente, me gusta más el MD5(), pero es simple preferencia.

Un saludo.
__________________
Estoy contagiado de Generación-I
  #8 (permalink)  
Antiguo 28/02/2005, 13:26
 
Fecha de Ingreso: febrero-2005
Mensajes: 66
Antigüedad: 19 años, 2 meses
Puntos: 0
Seguro que siempre lee los datos de la BD y no del índice. Tengo un libro con un ejemplo que dice que si tenemos un indice con x campos, y tenemos que leer los campo de los que estan en el índice ni siquiera lee la BD, lo hace directamente sobre el índice. Tené en cuenta que en ese caso solo le interesa los campos del índice y no el registro completo.
  #9 (permalink)  
Antiguo 28/02/2005, 13:57
 
Fecha de Ingreso: febrero-2005
Mensajes: 66
Antigüedad: 19 años, 2 meses
Puntos: 0
Otra a cuanto te refieres con pocos valores. Por decir un ejemplo supongamos una tabla con 10000 registros de usuarios, La PK sería usuario y el campo tipo o el que sea; ¿cuántos tipos diferentes recomendarías que tenga al menos para utilizarlo como indice?
O sea un tanto %. Si tienes 10000 supongamos un minimo de 500 diferentes o un 5%. Algo así.....Esos numeros son ejemplos no se confundan. Lo que quiero es que ustedes me respondan algo así.
  #10 (permalink)  
Antiguo 02/03/2005, 02:56
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
Depende del gestor de base de datos. En el caso del mysql no lo he visto aún por ningún lado, pero por ejemplo en Informix no se recomienda crear índices (esto no incluye a la primary key) si se tienen menos de 200 registros porque cuesta menos hacer la búsqueda secuencial que usando índices.
Y si, tienes razón, cuando se hace una consulta por todos los campos dentro del índice no se lee de la base de datos. Aquí se me fue un poco la cabeza :P.
Pero fíjate que si creas el índice único como usuario-password, te podrán repetir el usuario y se diferenciarán por la clave, lo cual no parece muy lógico. Y no tiene sentido crear un índice único por usuario y otro por usario-password.
De todas formas la diferencia de rendimiento si usas un índice único con respecto a tener que leer una fila o leer sólo del índice, es despreciable.
Un saludo.
__________________
Estoy contagiado de Generación-I
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 05:35.