Ejemplos de coincidencia inexacta de sentencias SQL en perfiles de optimización
Se produce una coincidencia inexacta en los perfiles de optimización si establece el atributo EXACT en false en el código STMTMATCH. A continuación, la sentencia de compilación se compara con las sentencias de un perfil de optimización activo. El compilador coincide con estas sentencias basándose en diferentes reglas de coincidencia predeterminadas y reglas que son específicas de la coincidencia inexacta.
Los ejemplos siguientes muestran dónde la coincidencia inexacta es satisfactoria para las sentencias SQL coincidentes.
- Ejemplo 1: Coincidencia inexacta en la cláusula de predicado
- Cada uno de los siguientes pares de fragmentos de sentencia tienen distintos valores literales para el predicado, pero siguen coincidiendo:
between '07/29/2010' and '08/29/2010' between '09/29/2010' and '10/29/2010' 'ab' like :hv1 'AYYANG' like :hv2 (A=1 AND B=1) OR (A=2 AND B=2) (A=:hv1 AND B=:hv2) OR (A=3 AND B=3) c1 > 0 selectivity 0.1 c1 > 0 selectivity 0.9 c1 = ? c1 = :hv1 - Ejemplo 2: Coincidencia inexacta en el predicado de lista IN
- Todos los fragmentos de sentencia siguientes tienen valores diferentes en el predicado de lista IN, pero siguen coincidiendo:
c1 in (:hv1, :hv2, :hv3); c1 in (:hv2, :hv3); c1 in ( ?, ?, ?, ?); c1 in (c1, c2 ); c1 in (:hv1, :hv2, c1, 1, 2, 3, c2, ?, ?); - Ejemplo 3: Coincidencia inexacta en la lista de selección
- El fragmento de sentencia siguiente tiene variables de lenguaje principal diferentes en la lista de selección, pero sigue coincidiendo:
select c1 into :hv1 from t1 select c1 into :hv2 from t1El fragmento de sentencia siguiente tiene literales diferentes en la lista de selección, pero sigue coincidiendo:select 1, c1 from t1 select 2, c1 from t1El fragmento de sentencia siguiente tiene una subconsulta diferente en la lista de selección, pero sigue coincidiendo:select c1, (select c1 from t1 where c2 = 0) from t1 select c1, (select c1 from t1 where c2 = 5) from t1El fragmento de sentencia siguiente tiene una expresión diferente en la lista de selección, pero sigue coincidiendo:select c1 + 1 select c1 + 2 - Ejemplo 4: Coincidencia inexacta para cláusulas diferentes
- El fragmento de sentencia siguiente tiene filas diferentes para la cláusula optimize, pero sigue coincidiendo:
optimize for 1 row optimize for 10 rowEl fragmento de sentencia siguiente tiene filas diferentes para la cláusula fetch, pero sigue coincidiendo:fetch first 10 rows only fetch first 50 rows onlyEl fragmento de sentencia siguiente tiene un valor literal diferente para la cláusula de tener, pero sigue coincidiendo:having c1 > 0 having c1 > 10Cada uno de los siguientes pares de fragmentos de sentencia tienen un posicionamiento de columna diferente para la cláusula order by o tienen valores literales diferentes para la expresión en la cláusula order by, pero siguen coincidiendo:order by c1+1, c2 + 2, 4 order by c1+2, c2 + 3, 4Cada uno de los siguientes pares de fragmentos de sentencia tienen distintos valores literales o variables de lenguaje principal para la cláusula set, pero siguen coincidiendo:set c1 = 1 set c1 = 2 set queryno = 2 set queryno = 3 set querytag = 'query1' set querytag = 'query2' SET :HV00001 :HI00001 = <subquery> SET :HV00009 :HI00009 = <subquery>Cada uno de los siguientes pares de fragmentos de sentencia tienen distintos valores literales para la cláusula group by, pero siguen coincidiendo:group by c1 + 1 group by c1 + 2 group by 1,2,3 group by 3,2,1Cada uno de los siguientes pares de fragmentos de sentencia tienen distintos valores literales para la cláusula de valores, pero siguen coincidiendo:values 1,2,3 values 3,4,5 values ( 10, 'xml', 'a' ) values ( 20, 'xml', 'ab' ) - Ejemplo 5: Coincidencia inexacta para funciones no XML
- Cada uno de los siguientes pares de fragmentos de sentencia tienen distintos valores literales en la llamada a función, pero tienen el mismo número de literales y siguen coincidiendo:
decimal(c1, 5, 2) decimal(c1, 9, 3) Blob('%abc%') Blob('cde%') max(1, 100, 200) max(INFINITY, NAN, SNAN) - Ejemplo 6: Coincidencia inexacta para expresiones especiales
- Cada uno de los siguientes pares de fragmentos de sentencia tienen distintos valores literales en mayúsculas o minúsculas cuando la expresión o la expresión mod, pero siguen coincidiendo:
order by mod(c1, 2) order by mod(c1, 4) case when b1 < 10 then 'A' else 'B' end case when b1 < 20 then 'C' else 'D' end - Ejemplo 7: Coincidencia inexacta para la función CAST
- En Db2® Versión 10.5 Fixpack 3 y fixpacks posteriores, el CAST de un literal, variable del lenguaje principal o marcador de parámetro coincide con sentencias con solo el literal, variable del lenguaje principal o marcador de parámetro sin la función CAST.
CAST( 'a' AS VARCHAR(5) ) CAST( 'b' AS VARCHAR(10) ) CAST( 'a' AS VARCHAR(5) ) 'a' CAST( 'a' AS VARCHAR(5) ) 'b' CAST( :myHostVar AS VARCHAR(5) ) :myHostVar CAST( C1+1 AS VARCHAR(5) ) C1+2 - Ejemplo 8: Coincidencia inexacta para la cláusula
ORDER BY - En Db2 Versión 10.5 Fixpack 3 y fixpacks posteriores, los números de columna secuenciales se conservan bajo una cláusula
ORDER BY.ORDER BY C1, UPPER(C2), 3, 1+4 ORDER BY C1, UPPER(C2), 3, 5+6 - Ejemplo 9: Coincidencia inexacta para filas duplicadas en una lista
VALUES - En Db2 Versión 10.5 Fixpack 3 y fixpacks posteriores, las filas duplicadas de la lista VALUES donde todas las columnas constan de un solo literal, variable del lenguaje principal o marcador de parámetro se eliminan antes de que se compare el texto de la sentencia.
VALUES (1,1,1), (2,2,2), …, (9,9,9) VALUES (1,2,3) VALUES (1+1,1,1), (2,2,2), (3,3+3,3), (4,4,4) VALUES (5+5,5,5), (6,6+6,6) VALUES (1,2), (C1,1), (2,2), (3,3) VALUES (C1,4) VALUES (C1+1,1), (C2+2,2), (3,3) VALUES (C1+4,4), (C2+5,5)