Foros del Web » Programando para Internet » PHP »

Buscar registro en corto tiempo

Estas en el tema de Buscar registro en corto tiempo en el foro de PHP en Foros del Web. Hola, tengo en mi base de datos cedulas, el registro de 10800 numeros de cedulas de esta forma, ID CEDULA 01 1023369545 02 1045678956 03 ...
  #1 (permalink)  
Antiguo 19/12/2007, 17:38
Avatar de nes24  
Fecha de Ingreso: julio-2005
Mensajes: 746
Antigüedad: 18 años, 9 meses
Puntos: 3
Buscar registro en corto tiempo

Hola,

tengo en mi base de datos cedulas, el registro de 10800 numeros de cedulas de esta forma,

ID CEDULA
01 1023369545
02 1045678956
03 1021324989
04 1085695214
05 1023654112
06 1986547855


La cuestion es que cuando nececesito buscar automaticamente 10 nuemeros de cedula elscript se demora mucho, supongo que de elscript coje el primer nuemro y lo compara con los 10800 registros y asi igualmente con el resto de los 10 numeros.

$slec="SELECT NUMEROSC from cedulas WHERE NUMEROSC='$cedula'";


hay alguna forma de hacer eso mas rapido, es decir buscar enlos registros dicho numero de una forma mas rapida....
  #2 (permalink)  
Antiguo 19/12/2007, 17:44
Avatar de jorgedx  
Fecha de Ingreso: junio-2005
Ubicación: Chile, Los Andes
Mensajes: 406
Antigüedad: 18 años, 10 meses
Puntos: 4
Re: Buscar registro en corto tiempo

claro que hay mas formas de hacer busquedas, pero primero dime como buscas en tu base de datos...
__________________
Nuevamente a las pistas ...
  #3 (permalink)  
Antiguo 20/12/2007, 14:18
Avatar de nes24  
Fecha de Ingreso: julio-2005
Mensajes: 746
Antigüedad: 18 años, 9 meses
Puntos: 3
Re: Buscar registro en corto tiempo

Cita:
Iniciado por jorgedx Ver Mensaje
claro que hay mas formas de hacer busquedas, pero primero dime como buscas en tu base de datos...
de esta forma:
$slec="SELECT NUMEROSC from cedulas WHERE NUMEROSC='$cedula'";

y un while que rrecorre lascedulasacomparar

while (cedulas){

$nj_row=mysql_num_rows($conn);

if($nj_row<1){

echo "la cedula $cedula no esta en el sistema";

}


}
  #4 (permalink)  
Antiguo 20/12/2007, 15:08
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Buscar registro en corto tiempo

Podrias ser mas claro como es que haces la busqueda?

Porque no tratas de hacer un SELECT..IN:
Código:
SELECT * FROM cedulas WHERE numerosc IN ( '$cedula1', '$cedula2', '$cedula3' );
Y claro haz un index en tu columna numerosc.

Saludos.
  #5 (permalink)  
Antiguo 20/12/2007, 15:46
Avatar de nes24  
Fecha de Ingreso: julio-2005
Mensajes: 746
Antigüedad: 18 años, 9 meses
Puntos: 3
Re: Buscar registro en corto tiempo

Cita:
Iniciado por GatorV Ver Mensaje
Podrias ser mas claro como es que haces la busqueda?

Porque no tratas de hacer un SELECT..IN:
Código:
SELECT * FROM cedulas WHERE numerosc IN ( '$cedula1', '$cedula2', '$cedula3' );
Y claro haz un index en tu columna numerosc.

Saludos.
Gracias,
Pues lo que yo trato de buscar simplemente es un numero entre 10800 registros de una forma mas rapida a WHERE NUMCEDULAS='$cedula', ya que dela anterior forma es muy lento y supongo que hay formas mas rapidas
  #6 (permalink)  
Antiguo 20/12/2007, 16:53
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Buscar registro en corto tiempo

Si solo estas buscando un numero, no se porque se tarda tanto tu consulta, que tipo de tabla es? tienes un índice en numerosc?

Saludos.
  #7 (permalink)  
Antiguo 21/12/2007, 04:23
Avatar de popobcn
Moderador
 
Fecha de Ingreso: noviembre-2006
Ubicación: Cerdanyola del Vallès
Mensajes: 3.892
Antigüedad: 17 años, 5 meses
Puntos: 1142
Re: Buscar registro en corto tiempo

Cita:
Iniciado por nes24 Ver Mensaje
de esta forma:
$slec="SELECT NUMEROSC from cedulas WHERE NUMEROSC='$cedula'";

y un while que rrecorre lascedulasacomparar

while (cedulas){

$nj_row=mysql_num_rows($conn);

if($nj_row<1){

echo "la cedula $cedula no esta en el sistema";

}


}
El problema esta justo aqui. Si estas realizando una busqueda de un NUMERO concreto, o sea, de un UNICO registro, no es necesario que montes un bucle del tipo WHILE para mostrar los resultados, simplemente has de hacer un LIST del resultado que deseas.

Es quizás por eso que se demore tanto, aunque me extraña ya que si haces la comparación en la consulta no tendria que recorrer todos los registros.

Saludos
  #8 (permalink)  
Antiguo 21/12/2007, 13:04
Avatar de nes24  
Fecha de Ingreso: julio-2005
Mensajes: 746
Antigüedad: 18 años, 9 meses
Puntos: 3
Re: Buscar registro en corto tiempo

Cita:
Iniciado por GatorV Ver Mensaje
Si solo estas buscando un numero, no se porque se tarda tanto tu consulta, que tipo de tabla es? tienes un índice en numerosc?

Saludos.
Gracias, no no tengo un indice en NCEDULAS como lo hago?????

y de pasito, para que sirve????
  #9 (permalink)  
Antiguo 21/12/2007, 19:41
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Buscar registro en corto tiempo

Un indice sirve para acelerar las consultas de una tabla por una columna en especifico.

Para crear un indice tienes que usar tu gestor favorito de base de datos, o usar el comando CREATE INDEX.

Saludos.
  #10 (permalink)  
Antiguo 21/12/2007, 23:16
Avatar de bitbow  
Fecha de Ingreso: julio-2006
Ubicación: Distrito Federal
Mensajes: 635
Antigüedad: 17 años, 9 meses
Puntos: 34
De acuerdo Re: Buscar registro en corto tiempo

Saludos, viendo tu pregunta del principio con el while haces la consulta tantas veces como cedulas tienes, estos claro que es lento con o sin indices, podrias hacer una sola comparacion dependiendo de cuantas cedulas tengas que buscar o por rangos de cedulas dependiendo del caso:

select campos from tabla where $cedula = valor1 or $cedula = valor2 etc
(para sacar cuales se encontraron y cuales no puedes comparar el resultado conlas busqueda y son menos registros que comparar)

no estoy muy adentrado en sql pero debe de haber alguna sentencia que te evite el or tan repetitivo, y si quieres buscar entre rangos (de 0 a 100 o de 1000 a 1010) puedes utilizar between, en fin, necesitas describir mejor lo que necesitas.

por sierto lo del indice es buena idea, ademas de que deberias de darle una leida a los conceptos generales y estructuras de base de datos para que te sea todo mas facil.

Suerte.
__________________
El ego es el mayor enemigo de un hombre inteligente.
  #11 (permalink)  
Antiguo 24/12/2007, 11:13
Avatar de nes24  
Fecha de Ingreso: julio-2005
Mensajes: 746
Antigüedad: 18 años, 9 meses
Puntos: 3
Re: Buscar registro en corto tiempo

Cita:
Iniciado por bitbow Ver Mensaje
Saludos, viendo tu pregunta del principio con el while haces la consulta tantas veces como cedulas tienes, estos claro que es lento con o sin indices, podrias hacer una sola comparacion dependiendo de cuantas cedulas tengas que buscar o por rangos de cedulas dependiendo del caso.......
Exacto, el while lo uso pues son varios numeros de cedula dentro del script, de por si son mas de 3000, es buena idea lode
while ncedula='$cedula' OR ncedula='$cedula2'slvo que 3000 seria algo lioso,

por ello el while, y las cedulas estan dentro de un txt.

acaso es mas rapido con sub consultas????
  #12 (permalink)  
Antiguo 24/12/2007, 12:04
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Re: Buscar registro en corto tiempo

Si las celulas estan en un TXT por que usar SQL ? por que no cargar todo en un array y buscar dentro de el ?
__________________
Salu2!
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 22:34.