2011-06-10 11 views
7

tuve que comprobar si un valor (cadena) está en mi base de datos.mysql velocidad mysql_num_rows vs consulta límite 1

en el momento hago un

select a.email,b.vuid from user a, verteiler_user b where a.email=\''.$email.'\' and a.kid=' . $kid.' and b.vid=' . $vid . ' and a.uid = b.uid

como la consulta con un mysql_num_rows, a continuación, comprobar if >=1

Pero es más rápido para hacer una consulta con el límite de 1; ? y verifica si vuelve una fila?

Respuesta

7

Sí. Sería más rápido ejecutar una consulta limit 1. Y si todo lo que hace es verificar la existencia de una fila, ¿por qué molestarse en devolver todas esas columnas? Simplemente seleccione 1. Eso será (insignificantemente) más rápido. Por cierto: su código parece vulnerable a los ataques de inyección SQL. Considere desinfectar las partes dinámicas de su consulta con mysql_real_escape_string() o una función similar.

+0

@Roby: Usted aceptó esta respuesta, pero luego no aceptada él. ¿Por qué? ¿Necesita alguna aclaración adicional? – Asaph

4

LIMIT 1 tendrá un mejor rendimiento porque dejará de coincidir cuando el LIMIT se haya cumplido.

Si solo espera 1 fila, agregue LIMIT 1 a su consulta.

Además, si solo está buscando la presencia de esa cadena en la consulta, no es necesario utilizar los nombres de columna con SELECT en la consulta. Simplemente use SELECT 1....

0

usted podría intentar:

select count(*) from user a, verteiler_user b 
    where a.email=\''.$email.'\' and a.kid=' . $kid.' and b.vid=' . $vid . ' and a.uid = b.uid 

y obtener el recuento por:

$row=mysql_fetch_array(...); 
if ($row[0] > 0) // is there a hit? 
    ...