En un DBMS decente, el motor de base de datos reconocería que no había caracteres comodín en la cadena y lo convertiría implícitamente en una igualdad pura (no necesariamente lo mismo que =
). Por lo tanto, solo obtendría un pequeño golpe de rendimiento al principio, generalmente insignificante para cualquier consulta de tamaño decente.
Sin embargo, el operador MySQL =
no actúa necesariamente de la manera esperada (como una comprobación de igualdad pura). En concreto, por defecto no tiene en cuenta los espacios finales de CHAR
y VARCHAR
de datos, lo que significa que:
SELECT age WHERE name = 'pax'
le dará filas de 'pax'
, 'pax<one space>'
y 'pax<a hundred spaces>'
.
Si usted quiere hacer una adecuada verificación la igualdad, se utiliza el binary
palabra clave:
SELECT field WHERE name = binary 'pax'
Puede probar esto con algo como:
mysql> create table people (name varchar(10));
mysql> insert into people value ('pax');
mysql> insert into people value ('pax ');
mysql> insert into people value ('pax ');
mysql> insert into people value ('pax ');
mysql> insert into people value ('notpax');
mysql> select count(*) from people where name like 'pax';
1
mysql> select count(*) from people where name = 'pax';
4
mysql> select count(*) from people where name = binary 'pax';
1
Baring un completo braindead implementación, el costo de cualquiera de las combinaciones de sabor de cadena va a empequeñecerse por el costo de mover datos del disco. Escribe lo que realmente quieres decir y sigue con la programación. –
Esto se ha cubierto previamente [aquí] (http://stackoverflow.com/questions/543580/equals-vs-like) en stackoverflow. Espero que esto ayude. – user34867
Gracias, he buscado esto antes de publicarlo pero no lo vi de alguna manera. – mluebke