Cómo asegurarse de que los predicados están codificados correctamente

La codificación correcta de los predicados de las sentencias de SQL tiene un gran efecto en el rendimiento de esas consultas.

Procedimiento

Iniciar la información de la interfaz de programación específica del programa. Para garantizar el mejor rendimiento de los predicados:

  • Asegúrese de que todos los predicados con posibilidad de ser indexables están codificados para que puedan ser indexables.
    Consulte Tipos de predicados y procesamiento por etapa para ver qué predicados son indexables y cuáles no.
  • Intente eliminar los predicados que son redundantes no intencionadamente o que no se necesiten; pueden disminuir el rendimiento.
  • Para las comparaciones de series que no son comparaciones de igual, asegúrese de que la longitud declarada de la variable de lenguaje principal sea menor que o igual al atributo de longitud de la columna de tabla con la que se compara. En los lenguajes en los que las series de caracteres terminan en valor nulo, la longitud de la serie puede ser menor o igual que la longitud de la columna más 1. Si la longitud declarada de la variable host es mayor que la longitud de la columna, en una comparación no igual, el predicado es de la etapa 1, pero no puede ser un predicado coincidente para un escaneo de índice.
    Por ejemplo, suponga que una variable de lenguaje principal y una columna de SQL están definidas de la siguiente manera:
    Declaración en lenguaje C Definición SQL
    char string_hv[15] STRING_COL CHAR(12)

    Un predicado como " WHERE STRING_COL > :string_hv " no es un predicado coincidente para un escaneo de índice porque la longitud de "string_hv" es mayor que la longitud de "STRING_COL". Una forma de evitar un predicado ineficiente utilizando variables de lenguaje principal es declarar la variable del lenguaje principal con una longitud menor o igual que la longitud de la columna:

    char string_hv[12]

    Puesto que es un ejemplo de lenguaje C, la longitud de la variable de lenguaje principal podría ser 1 byte mayor que la longitud de la columna:

    char string_hv[13]

    Para comparaciones numéricas, una comparación entre una columna DECIMAL y una variable de lenguaje principal real o flotante es de la etapa 2 si la precisión de la columna DECIMAL es mayor que 15. Por ejemplo, suponga que una variable de lenguaje principal y una columna de SQL están definidas de la siguiente manera:

    Declaración en lenguaje C Definición SQL
    float float_hv DECIMAL_COL DECIMAL(16,2)

    Un predicado como WHERE DECIMAL_COL = :float_hv no es un predicado coincidente para una exploración de índice porque la longitud de DECIMAL_COL es mayor que 15. Sin embargo, si DECIMAL_COL se define como DECIMAL (15,2), el predicado es de la etapa 1 e indexable.Finalizar la información de la interfaz de programación específica del programa.