Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

312
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda