Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

307
Views
¿Cuál es la diferencia entre `flag is TRUE` y `flag = TRUE` en MySQL?

Ejecuté las siguientes consultas en MySQL:

 SELECT * from table WHERE valid is TRUE ORDER BY priority DESC limit 10 offset 0;

Tiempo empleado = 1 segundo.

contra

 SELECT * from table WHERE valid = TRUE ORDER BY priority DESC limit 10 offset 0;

Tiempo empleado = 66 ms.

Tengo índices en (válido, prioridad) y (válido). ¿Por qué hay una diferencia tan grande? ¿Cuál es la diferencia entre es VERDADERO y = VERDADERO ?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Según el Mysql Doc para el operador IS

ES valor_booleano

Prueba un valor con un valor booleano, donde boolean_value puede ser VERDADERO, FALSO o DESCONOCIDO.

En SQL, un valor_booleano, ya sea VERDADERO, FALSO o DESCONOCIDO, es un valor de verdad. Cuando se usa el operador IS, el valor con el que se está probando debe expresarse/emitirse como uno de estos valores de verdad, y luego se evalúa la expresión.


En tu primera consulta:

SELECT * from table WHERE valid is TRUE ORDER BY priority DESC limit 10 offset 0;

según el tipo de datos de la columna válida, el valor real se evalúa para cada fila, lo que daría como resultado un análisis completo de la tabla, por lo que vería tiempos más altos.


En tu segunda consulta:

SELECT * from table WHERE valid = TRUE ORDER BY priority DESC limit 10 offset 0;

cuando usa el operador =, está comparando la columna válida con Boolean Literal TRUE, que es solo una constante de MySQL para 1.

over 4 years ago · Santiago Trujillo Report

0

Hay una diferencia muy importante:

  • IS TRUE solo verdaderos "verdadero" o "falso"

  • = TRUE puede devolver NULL .

En particular, NULL IS TRUE devuelve "falso".

En realidad, esto no es tan importante para IS TRUE . Es una diferencia sustancial para IS NOT TRUE versus NOT o <> true .

Eso IS TRUE y IS NOT TRUE es "NULL-safe":

 where NULL IS NOT TRUE --> evaluates to true and all rows are returned where NOT NULL --> evaluates to NULL and no rows are returned where NULL <> TRUE --> evaluates to NULL and no rows are returned

El NULL aquí podría ser una expresión que devuelve valores NULL .

Esta semántica se explica claramente en la documentación .

over 4 years ago · Santiago Trujillo Report

0

Hay una diferencia semántica entre los dos.

  1. El operador IS sirve como una forma de probar contra un cierto valor si es verdadero, falso o desconocido.

De la documentación: IS boolean_value

Prueba un valor con un valor booleano, donde boolean_value puede ser VERDADERO, FALSO o DESCONOCIDO.

mysql> SELECCIONE 1 ES VERDADERO, 0 ES FALSO, NULL ES DESCONOCIDO; -> 1, 1, 1

Para el operador "=", es simplemente una forma de equiparar algo para comparar. En su consulta, está utilizando valid para establecerse en True.

Entonces, dependiendo de su caso de uso, usaría los operadores. En su consulta actual, parece que hacen lo mismo.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!