A veces tenemos la alternativa de usar en un SELECT una constante, una variable, o el valor de una columna. Desde el punto de vista de la velocidad ¿hay diferencias entre cuál de ellas usar?

Alternativa 1. Usando una constante.

SELECT
   MiColumna
FROM
   MiTabla
WHERE
   MiColumna = 4567

Alternativa 2. Usando una variable.

SELECT
   MiColumna
FROM
   MiTabla
WHERE
   MiColumna = RDB$GET_CONTEXT('USER_SESSION', 'MIVALOR')

Alternativa 3. Usando el valor de una columna.

SELECT
   MiColumna
FROM
   MiTabla
WHERE
   MiColumna = (SELECT MiColumnaInteresante FROM MiOtraTabla)

Y en este caso MiOtraTabla tiene una sola fila.

¿Cuál de estas tres alternativas es la más rápida?

La más rápida es la Alternativa 1., luego le sigue la Alternativa 2. y finalmente la Alternativa 3, la más lenta de todas.

Claro que las diferencias de velocidad se miden en milisegundos así que en la práctica muchas veces será lo mismo si utilizas cualquiera de esas alternativas.

Artículos relacionados:

Usando variables en Firebird

El índice del blog Firebird21