JohnH ha cubierto muy bien la parte sobre cómo escribir la consulta. Hay otro problema importante que también debe mencionarse, sin embargo, cuáles son las características de rendimiento de dicha consulta. Vamos a repetir aquí (adaptado a Oracle):
SELECT EmployeeName FROM EmployeeTable WHERE LENGTH(EmployeeName) > 4;
Esta consulta está restringiendo el resultado de una función aplicada a un valor de columna (el resultado de aplicar la función LENGTH
a la columna de EmployeeName
). En Oracle, y probablemente en todos los demás RDBMS, esto significa que un índice regular en EmployeeName será inútil para responder a esta consulta; la base de datos hará un escaneo completo de la tabla, que puede ser realmente costoso.
Sin embargo, varias bases de datos ofrecen una función de índices de función que está diseñada para agilizar consultas como esta. Por ejemplo, en Oracle, puede crear un índice de esta manera:
CREATE INDEX EmployeeTable_EmployeeName_Length ON EmployeeTable(LENGTH(EmployeeName));
Esto todavía no podría ayudar en su caso, sin embargo, ya que el índice podría no ser muy selectiva para su condición. Con esto quiero decir lo siguiente: está pidiendo filas donde la longitud del nombre es más de 4. Supongamos que el 80% de los nombres de los empleados en esa tabla son más largos que 4.Bueno, entonces es probable que la base de datos concluya (correctamente) que no vale la pena usar el índice, porque de todos modos tendrá que leer la mayoría de los bloques en la tabla.
Sin embargo, si cambió la consulta para decir LENGTH(EmployeeName) <= 4
, o LENGTH(EmployeeName) > 35
, asumiendo que muy pocos empleados tienen nombres con menos de 5 caracteres o más de 35, entonces el índice sería seleccionado y mejoraría el rendimiento.
De todos modos, en resumen: tenga cuidado con las características de rendimiento de las consultas como la que está tratando de escribir.
¿Esto es para el servidor sql? – JonH