Mejorar la consulta SQL de Netezza que contiene cientos de cadenas en la cláusula WHERE

Lenwood

Tengo una consulta de Netezza con una cláusula WHERE que incluye varios cientos de cadenas potenciales. Me sorprende que se ejecute, pero lleva tiempo completarlo y ocasionalmente se producen errores ('transacción revertida por el cliente'). Aquí hay una versión de pseudocódigo de mi consulta.

SELECT
    TO_CHAR(X.I_TS, 'YYYY-MM-DD') AS DATE,
    X.I_SRC_NM AS CHANNEL,
    X.I_CD AS CODE,
    COUNT(DISTINCT CASE WHEN X.I_FLG = 1 THEN X.UID ELSE NULL) AS WIDGETS

FROM
    (SELECT
        A.I_TS,
        A.I_SRC_NM,
        A.I_CD,
        B.UID,
        B.I_FLG

    FROM
        SCHEMA.DATABASE.TABLE_A A
        LEFT JOIN SCHEMA.DATABASE.TABLE_B B ON A.UID = B.UID

    WHERE
        A.I_TS BETWEEN '2017-01-01' AND '2017-01-15'
        AND B.TAB_CODE IN ('00AV', '00BX', '00C2', '00DJ'...
                           ...
                           ...
                           ...
                           ...
                           ...
                           ...
                           ...)
    ) X

GROUP BY
    X.I_TS,
    X.I_SRC_NM,
    X.I_CD
;

En mi consulta, estoy limitando los resultados B.TAB_CODEa aproximadamente 1200 valores (de más de 10 k). Honestamente, estoy sorprendido de que funcione, pero lo hace la mayor parte del tiempo.

¿Existe una forma más eficiente de manejar esto?

Stavr00

Si la INcláusula se vuelve demasiado engorrosa, puede realizar su consulta en varias partes. Cree una tabla temporal que contenga un conjunto TAB_CODE y luego utilícelo en un archivoJOIN .

WITH tab_codes(tab_code) AS (
 SELECT '00AV' 
 UNION ALL
 SELECT '00BX' 
 --- etc ---
)
SELECT
  TO_CHAR(X.I_TS, 'YYYY-MM-DD') AS DATE,
  X.I_SRC_NM AS CHANNEL,
  --- etc ---
  INNER JOIN tab_codes Q ON B.TAB_CODES = Q.tab_code

Si desea aumentar aún más el rendimiento, considere usar una tabla temporal real ( CTAS)

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

Función de consulta de hoja de Google, que contiene una cadena en la cláusula Where

Cómo optimizar la consulta de la cláusula where que contiene to_char

Consulta Python MySQL usando comparación de cadenas en la cláusula where

Consulta Python MySQL usando comparación de cadenas en la cláusula where

Consulta linq con matriz de cadenas en la cláusula where

SQL: cómo seleccionar parámetros que no coinciden de la cláusula WHERE IN en el resultado de la consulta

Identifique la cláusula where que devuelve una fila específica en la consulta de selección en SQL Server

Mover combinaciones de la cláusula Where a la cláusula From en una consulta de Oracle

Use una cadena (campo multivalor de la tabla) como cláusula where en la consulta SQL

SERVIDOR SQL: cláusula WHERE en la subconsulta para obtener el atributo de la consulta externa

Consulta en rieles con la cláusula de matriz where

Reescritura de consulta con combinación de tabla que contiene la cláusula GROUP BY

La consulta de selección de Oracle SQL devuelve la identificación que no es mach a la cláusula where

Consulta SQL similar a la cláusula IN where con condición AND en lugar de OR

Función agregada de consulta SQL en la cláusula WHERE

sql usando un alias de consulta en la cláusula where

como cláusula en la consulta sql nativa de JPA

Mysql where cláusula consulta en la columna json en la que matriz de datos de objetos

El valor de la cláusula where en la consulta SQL es la columna principal de select

cómo usar la cláusula where en el retorno de datos de la cláusula when de la consulta

Especificar la zona horaria de una fecha en la cláusula WHERE de una consulta SQL de Postgres

No se puede usar la cláusula where después de usar la cláusula with en la consulta de Laravel

No se puede usar la cláusula where después de usar la cláusula with en la consulta de Laravel

¿Cómo se escribe una declaración SQL que crea una nueva columna para un valor de fecha y luego la consulta en la cláusula WHERE?

¿Cómo poner el filtro de consulta Django en la cláusula ON en lugar de la cláusula WHERE?

¿Cómo poner el filtro de consulta Django en la cláusula ON en lugar de la cláusula WHERE?

El uso de varias declaraciones OR anidadas en la cláusula WHERE hace que la consulta devuelva resultados incorrectos

Error de SQL en la cláusula WHERE COUNT ()

Java pasando valores a IN en la cláusula WHERE de SQL