Foros del Web » Programando para Internet » Python »

Querys lentas en python+mysql

Estas en el tema de Querys lentas en python+mysql en el foro de Python en Foros del Web. Saludos! apenas me estoy iniciando en esto de Python+MySQL y me puse en la tarea de realizar un "Mini benchmark" al ejecutar una simple consulta ...
  #1 (permalink)  
Antiguo 08/04/2010, 20:02
 
Fecha de Ingreso: junio-2008
Mensajes: 6
Antigüedad: 16 años, 5 meses
Puntos: 0
Querys lentas en python+mysql

Saludos!
apenas me estoy iniciando en esto de Python+MySQL
y me puse en la tarea de realizar un "Mini benchmark" al ejecutar una simple
consulta con PHP y Python,
con la idea de que python seria mas rapido.. me di cuenta de que no es asi...
siendo PHP mucho mas rapido por mas de 1 segundo

la consulta es
SELECT * FROM Table

la tabla tiene 14944 registos.

estos son los codigos tanto en Python como en PHP Respectivamente
notar que selecciono, con la consulta, todos los campos de la tabla, pero solo imprimo el ID.

Python
Código:
#!/usr/bin/env python
import MySQLdb
print "Connecting..."
db = MySQLdb.connect(host='localhost',user='root',passwd='123',db='db')
cursor=db.cursor()
print "Running query..."
cursor.execute('SELECT * FROM Table')
results=cursor.fetchall()

for row in results:
	print row[0]
PHP
Código:
#!/usr/bin/env php
<?php
print "Connecting...\n";
mysql_connect('localhost','root','123');
mysql_select_db('cc33');
print "Running Query...\n";
$result = mysql_query('SELECT * FROM Receta');
while($row = mysql_fetch_row($result)){
	print $row[0] ."\n";
}
Los resultados fueron calculados con time y fueron los siguientes.

en Python
real 0m3.880s
user 0m2.200s
sys 0m0.164s

en PHP
real 0m1.559s
user 0m0.392s
sys 0m0.076s



es mucha la diferencia no??
aqui es donde entra mi pregunta..
sera que estoy accediendo de la mejor forma a MySQL desde Python ?
tendre que configurar algo desde Python ??
o.. simplemente Python es mas lento que PHP ??


gracias de antemano.!!
  #2 (permalink)  
Antiguo 09/04/2010, 10:45
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Querys lentas en python+mysql

Hola kmil0cv:
Antes de sacar conclusiones hay que estar seguro de que se está comparando las mismas acciones.

- En PHP accedés directamente a la API de MySQL, en Python usas una interfaz. Sería más justo comparar MySQLdb contra ADOdb o las funciones mysql* de PHP contra las del módulo _mysql de Python.

Más allá de eso, me parece que la diferencia está a la hora de imprimir el resultado, ya que MySQL demora lo mismo, y el establecimiento de la conexión no debería suponer una gran carga.

- En PHP estás obteniendo e imprimiendo registro por registro. En Python estás obteniendo todos los registros en una lista, y luego imprimiendo uno por uno. De nuevo la comparación justa sería diferente: mysql_fetch_row contra cursor.fetchone(), o cursor.fetchall() contra un bucle que cargue todos los registros obtenidos en un vector, y luego imprima sus elementos uno a uno.

No digo que en estas condiciones Python resulte "vencedor", pero al menos estarás comparando en igualdad de condiciones.


Saludos.
  #3 (permalink)  
Antiguo 13/04/2010, 08:06
 
Fecha de Ingreso: junio-2008
Mensajes: 6
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Querys lentas en python+mysql

saludos AlvaroG.

Gracias por la pronta respuesta, lo siento por no responder mas temprano pero no me llego un correo de aviso xDD, en fin...

primero que todo, no estoy afirmando que php sea mas rapido que python, solo exprese una duda, apenas si estoy entrando en python+mysql, no tengo criterio para afirmar eso : )

parece que el modulo _mysql puede ser la solucion al problema de la velocidad, investigare mas al respecto.

ahora solo queda intentar lo de mysql_fetch_one y cursor.fetchone()
estre escribiendo al respecto y veremos como se comporta de las dos formas.


gracias de antemano!

Etiquetas: lento, mysql
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 16:50.