A veces queremos saber si una tabla tiene registros (filas). No nos interesa saber cuantas filas tiene sino si tiene alguna. Hay varias formas de obtener esa información:

Ejemplo 1:

SELECT
   COUNT(*)
FROM
   MiTabla

Esto funciona pero si la tabla tiene muchos millones de registros será muy lento porque el Firebird contará cuantas filas hay en la tabla y nos devolverá el resultado y esto tomará un buen tiempo. Pero no queremos saber cuantas filas hay en la tabla, solamente queremos saber si tiene filas o no y con este método estamos perdiendo mucho tiempo innecesariamente.

Ejemplo 2:

SELECT
   MIN(MiColumna)
FROM
   MiTabla

Si la tabla tiene un índice ascendente sobre la columna “MiColumna” entonces hallar el mínimo de esa columna será muy rápido. Este método es mucho más eficiente que el del Ejemplo 1, el resultado se obtiene mucho más rápido.

Ejemplo 3:

SELECT
   MiColumna
FROM
   MiTabla
WHERE
   MiColumna > 0
ROWS
   1 TO 1

Y este método es el más eficiente de los tres ya que el Firebird ni siquiera necesita llamar a una función sino simplemente verifica si la primera fila tiene un valor mayor que cero y si ese es el caso ya devuelve el resultado porque ROWS 1 TO 1 le dice que devuelva una fila. Desde luego que “MiColumna” debería ser de tipo numérico y todos sus valores mayores que cero. Si ese no es el caso entonces habría que poner una condición que se cumpla siempre, en el 100% de los casos, para que este método sea el más rápido. En general lo conveniente es que “MiColumna” sea la Primary Key, que es una columna autoincremental y por lo tanto siempre tiene valores mayores que cero.

Artículos relacionados:

El índice del blog Firebird21

El foro del blog Firebird21