Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

que es mas rapido?

Estas en el tema de que es mas rapido? en el foro de Mysql en Foros del Web. Hola, queria saber cual es la manera mas rapida: Esta: Código PHP: $sql  =  mysql_query ( "SELECT COUNT(*) FROM `users` WHERE `username`='{$username}' LIMIT 1;" ); $sql  =  mysql_fetch_array ( $sql ); $sql  ...
  #1 (permalink)  
Antiguo 03/05/2011, 19:45
 
Fecha de Ingreso: julio-2009
Mensajes: 58
Antigüedad: 15 años, 4 meses
Puntos: 0
que es mas rapido?

Hola, queria saber cual es la manera mas rapida:

Esta:
Código PHP:
$sql mysql_query("SELECT COUNT(*) FROM `users` WHERE `username`='{$username}' LIMIT 1;");
$sql mysql_fetch_array($sql);
$sql $sql[0]; 
o esta:
Código PHP:
$sql mysql_query("SELECT COUNT(id) FROM `users` WHERE `username`='{$username}' LIMIT 1;");
$sql mysql_fetch_array($sql);
$sql $sql[0]; 
Y otra pregunta es si es necesario utilizar siempre los ` en los fields o tables (`users` o `username`). Es recomendable usarlo? Es mas seguro? En que cambia?

Y luego sobre el punto y coma al final. Se debe poner al final de cada consulta un ";" sea cual sea la consulta? o solo cuando hay un LIMIT 1? Es importante poner los punto y coma?

Desde ya muchas gracias.
  #2 (permalink)  
Antiguo 03/05/2011, 21:04
Avatar de lair  
Fecha de Ingreso: enero-2009
Ubicación: header('Location: Morelia");
Mensajes: 1.052
Antigüedad: 15 años, 10 meses
Puntos: 46
Respuesta: que es mas rapido?

Hola.

Primero cual es la diferencia entre count(*) y count(id):

el count(id) lo que hace es contabilizar los registros que NO TIENEN NULL en ese campo, por lo que si alguno de los registros no tienen algo en ese campo o es null no sera tomado en cuenta para el conteo; con ese campo creo que es un poco dificil pero imagina que fuera algun otro, por ejemplo un campo que diga mail, el cual si puede contener valores nulos, ese si hay 10 registros y 3 no tienen mail entonces un count(mail) te daria como resultado 7. espero sea suficientemente claro.

segundo yo nunca pongo esas comillas (`) solo pongo el nombre del campo si alguien sabe en que afecta agradeceria me hiciera ver mi error.

y tercera cuando estas en el prompt (consola o linea de comandos) si es estrictamente necesario colocar el delimitador en cada instruccion o consulta, mientras que en una cadena de php (consulta) no es necesario, puedes tener asi instrucciones sql.

Código PHP:
Ver original
  1. mysql_query("select * from tabla");
  2. mysql_query("insert into tabla (campo1, campo2, campoN) values('valor1','valor2','valorN')");
etc. etc...

Espero te ayude Suerte.
  #3 (permalink)  
Antiguo 04/05/2011, 13:16
 
Fecha de Ingreso: julio-2009
Mensajes: 58
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: que es mas rapido?

Muchas Gracias!

Lo que realmente quiero es contar las tablas segun la condicion que haya despues del WHERE, o sea que no me importa si el id u otro es NULL. En ese caso es mas rapido usar COUNT(*)?

Pregunto esto porque generalmente el * se usa para todos los campos, y tal vez al poner COUNT(id) se ahorra de buscar en todos los campos. Seguramente me equivoque... no se.

Desde ya mucha gracias.

Última edición por ernewston; 05/05/2011 a las 11:26
  #4 (permalink)  
Antiguo 05/05/2011, 11:27
 
Fecha de Ingreso: julio-2009
Mensajes: 58
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: que es mas rapido?

Alguna ayuda? Gracias!
  #5 (permalink)  
Antiguo 05/05/2011, 11:39
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: que es mas rapido?

COUNT(*) no es indicativo de campos, sino de registros. Cuando usas COUNT(*) no verifica el estado de los campos sino la existencia de registros. En este caso lo que hace es contar el resultado de la consulta, pero es la consulta la que verifica las condiciones.
En cambio, cuando usas COUNT(campo), MySQL debe recuperar valores no NULL, lo que puede implicar que obtenga más registros de los que cuenta.
En cualquier caso siempre es mejor usar COUNT(*) con una consulta eficiente, optimizada.

Lo que no tiene sentido es usar LIMIT en una consulta que sólo tenga un COUNT en el SELECT, porque como COUNT() es una cláusula de agrupamiento, siempre te devolverá un sólo registro si no hay un GROUP BY presente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: rapido
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:16.