Foros del Web » Programando para Internet » PHP »

como hacer una busqueda de forma mas optima?

Estas en el tema de como hacer una busqueda de forma mas optima? en el foro de PHP en Foros del Web. tengo una tabla que pesa 1.3 GB, llamada rep (17,776,774 registros) en esta tabla se encuentra cedula (int (8)) nombre (varchar(35)) codigo (varchar(9)) fnac (date) ...
  #1 (permalink)  
Antiguo 02/08/2010, 11:08
 
Fecha de Ingreso: junio-2010
Ubicación: Venezuela, Zulia
Mensajes: 686
Antigüedad: 13 años, 9 meses
Puntos: 55
como hacer una busqueda de forma mas optima?

tengo una tabla que pesa 1.3 GB, llamada rep (17,776,774 registros) en esta tabla se encuentra

cedula (int (8))
nombre (varchar(35))
codigo (varchar(9))
fnac (date)

tengo otra tabla llamada repdir (13,059,841 registros) que pesa 662 MB y trae estos campos

cedula (int(8))
direccion (varchar(30))

y otra tabla llamada repcen que pesa 4 MB y trae estos campos

codigo (varchar(9))
estado (varchar(25))
municipio varchar(30)
parroquia varchar(35)
centro varchar(65)


estoy usando el siguiente codigo

Código PHP:
<?
include("cone.php");
$link=conectarse();
$cedula=$_POST["cedula"]; 
$result=mysql_query("SELECT * FROM rep where rep.cedula = ('$cedula')",$link);
$result1=mysql_query("SELECT * FROM repdir where repdir.cedula = ('$cedula')",$link);
$array=mysql_fetch_array($result);
$array1=mysql_fetch_array($result1);

$codigo=$array["codigo"];
$result2=mysql_query("SELECT * FROM repcen where repcen.codigo = ('$codigo')",$link);
$array2=mysql_fetch_array($result2);
?>
<table width="700" border="1" align="center">
  <tr>
    <td colspan="2"><div align="center"><strong>CONSULTA DEL REP</strong></div></td>
  </tr>
  <tr>
    <td><div align="right">CEDULA</div></td>
    <td><? echo $array["cedula"]; ?></td>
  </tr>
  <tr>
    <td><div align="right">APELLIDOS Y NOMBRES</div></td>
    <td><? echo $array["nombre"]; ?></td>
  </tr>
  <tr>
    <td><div align="right">FECHA DE NACIMIENTO</div></td>
    <td><? echo $array["fnac"]; ?></td>
  </tr>
  <tr>
    <td><div align="right">DIRECCION</div></td>
    <td><? echo $array1["direccion"]; ?></td>
  </tr>
  <tr>
    <td><div align="right">CODIGO DE C.V.</div></td>
    <td><? echo $array["codigo"]; ?></td>
  </tr>
  <tr>
    <td><div align="right">CENTRO DE VOTAC.</div></td>
    <td><? echo $array2["centro"]; ?></td>
  </tr>
  <tr>
    <td><div align="right">PARROQUIA</div></td>
    <td><? echo $array2["parroquia"]; ?></td>
  </tr>
  <tr>
    <td><div align="right">MUNICIPIO </div></td>
    <td><? echo $array2["municipio"]; ?></td>
  </tr>
  <tr>
    <td><div align="right">ESTADO</div></td>
    <td><? echo $array2["estado"]; ?></td>
  </tr>
</table>
el problema que tengo es que para hacer una busqueda de una cedula se tarda entre 20 y 40 segundos, y hay ocasiones en que me muestra error que se agoto el tiempo de ejecuccion en linea 6 que es esta

$result1=mysql_query("SELECT * FROM repdir where repdir.cedula = ('$cedula')",$link);

entonces nose que manera podria hacer para que las consultas sean mas rapidas, y no se tarde tanto tiempo

Última edición por johhan16; 02/08/2010 a las 11:14
  #2 (permalink)  
Antiguo 02/08/2010, 14:56
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 8 meses
Puntos: 1532
Respuesta: como hacer una busqueda de forma mas optima?

una de las formas para acelerar la búsqueda es declarar indices en la tabla (index), así el DBMS internamente resuelve las posiciones más rápido, además, si buscas enteros, asegurate de limpiarlos bien en php, luego en el sql pásalos sin comillas, así evitas que el interprete sql convierta cada tipo entero en string para compararlo con el string, por ejemplo:

SELECT * FROM rep where rep.cedula = 123456789; es más rápido que:
SELECT * FROM rep where rep.cedula = '123456789';

claro, corres riesgo de sql inyection, pero si limpias adecuadamente la variable en php evitas eso, hay muchas formas, como:

$cedula = intval($cedula); //aseguramos que al menos devuelva un entero (no es la única forma)
  #3 (permalink)  
Antiguo 02/08/2010, 20:12
 
Fecha de Ingreso: junio-2010
Ubicación: Venezuela, Zulia
Mensajes: 686
Antigüedad: 13 años, 9 meses
Puntos: 55
Respuesta: como hacer una busqueda de forma mas optima?

bueno me he fijado que el problema en si es de esta linea

$result1=mysql_query("SELECT * FROM repdir where repdir.cedula = ('$cedula')",$link);

porque al colocarla como comentario junto con esta

$array1=mysql_fetch_array($result1)

me funciona de maravilla, en milisegundos, pero al volver a colocar estas se vulve nuevamente lento.

lo extraño de todo es que esta tabla tiene la estructura igual que las otras 2

Etiquetas: mas, busquedas, formulario
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 11:09.