Foro oficial de PHP

unemesis, lo que pasa es que una BD de ese tamaño es considerablemente grande y dependiendo de tu maquina puede tardar mucho en obtener un resultado. Lo recomendado en estos casos es crear un indice por el/los campo/s que quieres buscar para que se te acelere el proceso.
 
unemesis, lo que pasa es que una BD de ese tamaño es considerablemente grande y dependiendo de tu maquina puede tardar mucho en obtener un resultado. Lo recomendado en estos casos es crear un indice por el/los campo/s que quieres buscar para que se te acelere el proceso.

Exactamente tienes que colocarles indices para acelerar la busqueda...una pregunta la base de datos y el servidor de php estan montados en un mismo equipo o en varios...

Que modelo de capas utilizas 3? o mas? hay que ver todo los aspectos que pueden accelar las consultas-
 
  • Me gusta
Reacciones: 2 personas
unemesis dijo:
Tambien por aquí pidiendo asesoría, estoy comenzando a programar en estos lenguajes (PHP+MySQL) y me he tropezado con algo:
Actualmente tengo una bd con 2 tablas: una con datos personales (id, tel, nombre, dir, ciudad, email) de cerca de 1'800.000 registros en tipo InnoDB y, otra con una lista de ciudades, la primera tabla contiene un codigo de ciudad y es con la que se conecta a la tabla ciudad que tambien tiene este código_ciudad. Mi dificultad reside en que al realizar una consulta por teléfono o nombre, la busqueda tarda mucho en devolver los resultados, incluso cuando solo debe devolver un solo registro, cuando la base tenia cerca de 500.000 registros trabajaba muy ágil pero a medida que le cargaba registros noté lo lento, incluso me sale este mensaje:

Fatal error: Maximum execution time of 30 seconds exceeded in

Bueno, espero esto sea un trabe bobo y espero sus respuestas, pues estoy engomado con lo poderoso que es PHP y esto me tiene cabezón hace varios dias.

Suerte.
Tienes bien normalizada tus tablas? Estás utilizando índices en los campos que más utilizas para filtrar? Esto no es de PHP sino más bien de MySQL, pero te aconsejo que mires bien tus esquemas para que estén bien normalizadas y para que estés utilizando índices en donde los necesites... Mira la sentencia EXPLAIN (por ejemplo EXPLAIN SELECT * FROM .... la cual te ayuda a ver cómo se está ejecutando tu consulta y te puede ayudar a optimizar la tabla.


Saludos.
 
  • Me gusta
Reacciones: 2 personas
La_PaRCa dijo:
Sixto: La forma mas facil de hacerlo es con expresiones regulares. La funcion que se encarga de decirte si una expresion esta de acuerdo con una expresion regural es preg_match($patron, $cadena)

um, en este caso, que es alfanumerico creo que el patron adecuado es [a-zA-Z0-9]

entonces en este caso seria:

PHP:
if(preg_match("/[a-zA-Z0-9]/",$cadena)){
   //Se hace algo si la cadena es correcta
}else{
   //Que se hace si la cadena no es correcta
}

Ahora, eso es para hacerlo del lado del servidor. Si lo quieres hacer del lado del cliente puedes hace una funcion en JavaScript para validar (tambien con expresiones regulares) y llamarla desde la declaracion del form, asi:

PHP:
<script language="javascript">

function validar(){

if(document.MiForm.aValidar.value.match("/[a-zA-Z0-9]/")){
   return true;
   }
   else{
     alert("Entrada no valida");
     return false;
   }

}

</script>


<form name="MiForm" action="ElObjetivo.php" method="POST" onSubmit="return validar();">

<input type="text" name="aValidar" />

</form>

Vale decir que por cuestiones de comodidad, es mejor validar en el lado del usuario, y por seguridad en el lado del servidor. Una MUY buena practica es validar en los dos lados.

Suerte

La_PaRCa gracias por el codigo voy a mirar si me sirve
 
Originalmente Escrito por Yeison
una pregunta la base de datos y el servidor de php estan montados en un mismo equipo o en varios

Si, ambos estan en el mismo equipo.


Originalmente Escrito por JulianD
Tienes bien normalizada tus tablas? Estás utilizando índices en los campos que más utilizas para filtrar? Esto no es de PHP sino más bien de MySQL

Normalizadas pues no, para lo que quiero me queda imposible pues como ya dije tengo 1.800.000 registros y llegaron todos de una en 3 BD diferentes (2 en access y una en excel) y cada una con diferentes formatos (una tenia tels, otra no, una nombres la otra no) de usuarios y luego pueden llegar otro millón de tacada, pues la empresa los usa para localizar personas que tienen deudas (esto ya es otro rollo).

Pero bueno, ya pude agilizar la busqueda haciendo lo que me digeron al agregar indices en los campos que mas se usan que son el tel y el nombre.

Gracias, creo que aquí encontré un buen lugar donde asesorarme, y porque nó, asesorar.

Suerte.
 
unemesis dijo:
Tambien por aquí pidiendo asesoría, estoy comenzando a programar en estos lenguajes (PHP+MySQL) y me he tropezado con algo:
Actualmente tengo una bd con 2 tablas: una con datos personales (id, tel, nombre, dir, ciudad, email) de cerca de 1'800.000 registros en tipo InnoDB y, otra con una lista de ciudades, la primera tabla contiene un codigo de ciudad y es con la que se conecta a la tabla ciudad que tambien tiene este código_ciudad. Mi dificultad reside en que al realizar una consulta por teléfono o nombre, la busqueda tarda mucho en devolver los resultados, incluso cuando solo debe devolver un solo registro, cuando la base tenia cerca de 500.000 registros trabajaba muy ágil pero a medida que le cargaba registros noté lo lento, incluso me sale este mensaje:

Fatal error: Maximum execution time of 30 seconds exceeded in

Bueno, espero esto sea un trabe bobo y espero sus respuestas, pues estoy engomado con lo poderoso que es PHP y esto me tiene cabezón hace varios dias.

Suerte.


Ole man subile el parámetro al php.ini "max_execution_time = 30" por lo menos a 600 o algo así... porque posiblemente el script sí esté haciendo el proceso pero como el parámetro está en 30 segundos, si se demora más se muere...

y para sacar los registros utiliza mysql_fetch_assoc() o mysql_fetch_array() algo asó
while($registro = mysql_fetch_assoc($resultado)){
$var1 = $registro['nombre_campo'];
....
$varN 0 $registro['nombre_campoN'];
}

así la consulta se muestra más rápido que con un for y un mysql_result que es más lento...

Y obviamente creo que ya lo han dicho, también incide mucho la consulta sql... y si la idea es enlazar 2 tablas hacelo con un INNER JOIN que es más rápido que con una sentencia WHERE...

Espero no estar muy perdido respondiendo porque no leí todos los posts :rolleyes:
 
CHiKi dijo:
Ole man subile el parámetro al php.ini "max_execution_time = 30" por lo menos a 600 o algo así...
y para sacar los registros utiliza mysql_fetch_assoc() o mysql_fetch_array() algo asó
while($registro = mysql_fetch_assoc($resultado)){
.....
}
así la consulta se muestra más rápido que con un for y un mysql_result que es más lento...

Y obviamente creo que ya lo han dicho, también incide mucho la consulta sql... y si la idea es enlazar 2 tablas hacelo con un INNER JOIN que es más rápido que con una sentencia WHERE...

Gracias, si ya estoy haciendo la consulta con INNER JOIN y recorriendo la tabla con un mysql_fetch_array a la hora de mostrar los resultados, pues esta es una buena forma de hacer la consulta, no solo para ahorrar código, sino para agilizar la consulta en la BD.

Yeison dijo:
puedes agilizar mas rapidos las peticiones si colocas la base de datos en un solo equipo con bastante memoria y un buen procesador.

Exacto, tambien estaba un poquito desconcertado cuando puse mi primer post ya que el equipo donde tengo la BD y el Apache en un Athlon XP 3200+ con 512MB y el problema apuntaba mas a la BD,y resultó ser así ya que no le había asignado índices y esto fué lo que agilizó definitivamente la busqueda dentro de los 1'800.000 registros.

Gracias, Suerte.
 
Hey no tengo ni idea de PHP...y quisiera empezar de donde me bajo programas, manuales..etc...
gracias..
En español..soy muy malo pal ingles...
 
o sea que ya se solucionó el problema??? espero que sea así..

Yo nunca he manejado índices... y mi pregunta es... es lo mismo que manejar relacionalidad??? o no tiene nada que ver?? o sea, es lo mismo un índice que una llave primaria??? pues lo que tengo entendido es que un índice se utiliza para sacar info más rápido al tener campos similares en las tablas.. pero para eso son las llaves primarias no??
 
sb1039 dijo:
Hey no tengo ni idea de PHP...y quisiera empezar de donde me bajo programas, manuales..etc...
gracias..
En español..soy muy malo pal ingles...
sabes programar algun lenguaje?
logica == logica
variables == variables php
no es tan dificil una vez sabiendo las bases, solo existen diferencias en algunas funciones[nombres](principalmente en lenguajes como basic) y muchas similitudes como C++ o javascript, como se declaran variables y el alcance de ellas... easy wall...
aqui te dejo unos bookmarks...
 

Archivos adjuntos

  • bookmarks.zip
    17.6 KB · Visitas: 128
CHiKi dijo:
o sea que ya se solucionó el problema??? espero que sea así..

Yo nunca he manejado índices... y mi pregunta es... es lo mismo que manejar relacionalidad??? o no tiene nada que ver?? o sea, es lo mismo un índice que una llave primaria??? pues lo que tengo entendido es que un índice se utiliza para sacar info más rápido al tener campos similares en las tablas.. pero para eso son las llaves primarias no??
No tiene nada que ver... las llaves primarias actúan como índices también, pero que pasa si quieres buscar en una tabla por un campo que no es la llave primaria....

Depronto esta página que encontré puede servirte:

http://glud.udistrital.edu.co/glud/areas/doc/articulos/8_optimizacion_mysql/
 
Yeison dijo:
Men para eso existe google:D

La cuestion es que casi todas las paginas ya dan por hecho que instale todo

Quiero saber como debo instalar el appserv, y empezar...
Yo tengo una pagina diseñada en su totalidad en flash...pero quiero agregarle un foro y chat a traves de php....eso es basicamente lo que quiero...

Toda la ayuda gracias...
 
sb1039 dijo:
La cuestion es que casi todas las paginas ya dan por hecho que instale todo

Quiero saber como debo instalar el appserv, y empezar...
Yo tengo una pagina diseñada en su totalidad en flash...pero quiero agregarle un foro y chat a traves de php....eso es basicamente lo que quiero...

Toda la ayuda gracias...
esos son cosas que son largas de explicar, por lo que busca un tuto...
segun el SO y el server www que tengas es la forma de Instalar php, asi como los modulos que vayas a utilizar, tambien la forma: binaria o modulo...
google are you friend...
 
Mira por ahi me recomendaron el foro de esta pagina, ya esta prediseñado casi todo...
www.phpbb.com
pero no he podido utilizarlo...lo estoy montando a miarroba y nada..no se que hay que hacer...si alguien conoce este foro y lo tiene implementado que me colabore...
 
a todos los duros en php, recomiendenme un programa que instale php ,mysql . juntos, pues eso de configurar php mysql y apache cadaves que formateo el pc, me cabrio, pero eso si !! recomiendenme programas con todos los juquetes ademas de los anteriormente mensionados.
 
MEICKOL dijo:
a todos los duros en php, recomiendenme un programa que instale php ,mysql . juntos, pues eso de configurar php mysql y apache cadaves que formateo el pc, me cabrio, pero eso si !! recomiendenme programas con todos los juquetes ademas de los anteriormente mensionados.
WAMP o XAMP pueden ser la solución a lo que estás buscando.
 

Los últimos temas