Foros del Web » Programando para Internet » PHP »

PHP y MySQL - como optimizar la consulta?

Estas en el tema de PHP y MySQL - como optimizar la consulta? en el foro de PHP en Foros del Web. Hola que tal, Si yo tengo una tabla digamos que contiene mas de 100 mil usuarios, como haría para optimizar la consulta? Es recomentable usar ...
  #1 (permalink)  
Antiguo 18/10/2008, 18:58
 
Fecha de Ingreso: mayo-2007
Mensajes: 13
Antigüedad: 17 años, 6 meses
Puntos: 0
PHP y MySQL - como optimizar la consulta?

Hola que tal,

Si yo tengo una tabla digamos que contiene mas de 100 mil usuarios, como haría para optimizar la consulta?

Es recomentable usar el SELECT COUNT(*) y LIMIT m,n para la paginación?

Si quiero modificar los usuarios en masa, es correcto usar el while($row=mysql_fetch_array($res)){ } ?

Gracias de antemano
  #2 (permalink)  
Antiguo 18/10/2008, 19:32
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: PHP y MySQL - como optimizar la consulta?

lo del LIMIT, es justo una medida para limitar los resultados de la consulta.. parece obvio, y claramente es un recurso mas de optimización ...

el COUNT(*) siempre lo he usado y es optimo para cualquier tabla... seguro?

y la modificación en masa se hace por lo regular (pienso yo) con el operador IN ...

si tienes dudas al respecto, esperaremos algún otro comentario... aunque pienso que este debería ir en el foro de MySQL (ya que en este caso PHP es trivial, creo)

suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 18/10/2008, 20:02
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: PHP y MySQL - como optimizar la consulta?

:P Tambien puedes usar el cache de consultas para optimizar las consultas mas frecuentes a la base de datos.
  #4 (permalink)  
Antiguo 23/10/2008, 08:44
Avatar de stone_neo  
Fecha de Ingreso: abril-2004
Ubicación: Peru
Mensajes: 438
Antigüedad: 20 años, 7 meses
Puntos: 15
Respuesta: PHP y MySQL - como optimizar la consulta?

Pues si quieres optimizar tus consultas debes agregar indices a tu tabla, evita el uso de select count(*), cuando realices un select, solo obten los campos que vas a utilizar, no hagas Select *, eso merma el rendimiento de la base de datos.
__________________
Rubén Darío Huamaní Ucharima
Web : http://www.gorilla-soft.com
Usuario Linux #382 100 :-)
  #5 (permalink)  
Antiguo 23/10/2008, 09:02
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: PHP y MySQL - como optimizar la consulta?

stone_neo, porque no es bueno el COUNT(*) digo.... he visto que sirve en paginacion, etc. pero.... ¿porque no es bueno hacer estos SELECT?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 23/10/2008, 09:15
Avatar de stone_neo  
Fecha de Ingreso: abril-2004
Ubicación: Peru
Mensajes: 438
Antigüedad: 20 años, 7 meses
Puntos: 15
Respuesta: PHP y MySQL - como optimizar la consulta?

Mira si hace un select count(*) te va a barrer toda la tabla, imaginate que tu tabla tenga 10000 registros, en cambio si haces un select count(primary_key_tabla), si realizaste muy bien tu diseño de base de datos, tendrás un indice de esa tabla con ese campo, con lo cual al hacer el count(primary_key_tabla) solo estarías barriendote el indice y no la tabla completa.
__________________
Rubén Darío Huamaní Ucharima
Web : http://www.gorilla-soft.com
Usuario Linux #382 100 :-)
  #7 (permalink)  
Antiguo 23/10/2008, 09:20
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: PHP y MySQL - como optimizar la consulta?

Mmm tienes alguna referencia donde se indique que count(*) barre toda la tabla?, hasta donde yo se y he visto count(*) no cuenta por ningún indice, solamente cuenta el número de filas (por eso es más optimo que usar count(primary_key)).

Saludos.
  #8 (permalink)  
Antiguo 23/10/2008, 09:33
Avatar de stone_neo  
Fecha de Ingreso: abril-2004
Ubicación: Peru
Mensajes: 438
Antigüedad: 20 años, 7 meses
Puntos: 15
Respuesta: PHP y MySQL - como optimizar la consulta?

mmmmmmmm no entender bien lo que dices

Cita:
hasta donde yo se y he visto count(*) no cuenta por ningún indice
Cuando realizas un select count(*), se te hace un barrido de toda la tabla, no es que hagas un select count(*) y magicamente se te da el número de filas, el motor de la base de datos, se barre toda la tabla para que te de el numero total de registros, y recorre fila por fila.

En cambio cuando realizar un select count(primary_key) solo hace un barrido de esa columna para toda la tabla, y tu sabes que cuando creas un primary key se crea automaticamente un indice, con lo cual el select count(primary_key), lo que te hara sera barrer todo el indice, lo cual es mas rapido que hacerlo de toda la tabla, cuando tenemos inmensa cantidad de data.
__________________
Rubén Darío Huamaní Ucharima
Web : http://www.gorilla-soft.com
Usuario Linux #382 100 :-)
  #9 (permalink)  
Antiguo 23/10/2008, 10:39
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: PHP y MySQL - como optimizar la consulta?

pienso igual que GatorV y no lo se... pero me suena

es como con un arreglo, usar un sizeof de PHP, ahí no se compara nada ni "barre" nada... solo devuelve la cantidad de elementos...

mas si, le especificas un nombre de columna en SQL COUNT(foo) no solo va a devolver el numero de filas... sino que va a comprobar que dicha columna existe... y eso, se me hace un poquito mas de esfuerzo, supongo que el COUNT no cuenta la cantidad de columnas, solo de filas... y al no existir un indice le vale el contenido (y columnas) y va al grano

la verdad me resulta difícil creer la negativa hacia el COUNT(*) y exhorto, a exponer la documentación (citada) donde especifique la mejor manera de optimizar el conteo total de filas..... osea, el canijo COUNT(*) ¿esta bien? ¿de veras?

PDTA: estoy con GatorV
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 23/10/2008, 11:04
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: PHP y MySQL - como optimizar la consulta?

En efecto, todo lo que conozco, COUNT(*) y en el manual mismo aconsejan su uso, esto es debido a que COUNT(*) toma el Wildcard y al ver que no es una expresion a evaluar solamente CUENTA las filas, recuerda que COUNT es una función, puedes y es perfectamente válido hacer: COUNT(DISTINCT tabla.row), al tu usar el * es cuenta todo, y no evalua nada por ende es más rápido.

Saludos.
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 14:46.