Estaba escribiendo una consulta en Visual Studio 2010 (me refiero a que abrí el explorador del servidor, hice clic con el botón derecho en el servidor y seleccioné Nueva consulta). La consulta incluye la condiciónOptimización de SQL y forma normal disyuntiva
A AND B AND C AND D AND E AND F AND (G OR H)
que es la forma normal conjuntiva (CNF). Cuando me encontré con la consulta (que se adjunta a MSSQL Server 2008), cambió el texto en
A AND B AND C AND D AND E AND F AND G OR
A AND B AND C AND D AND E AND F AND H
que es la forma normal disyuntiva (DNF).
Por lo poco que encontré en línea, parece que DNF permite que SQL ejecute los conjuntivos por separado y los una al final.
Sin embargo, para algo como esto, con tantas condiciones repetidas, ¿ofrece realmente DNF una ventaja sobre CNF? Si no es así, ¿cómo puedo forzar al optimizador a tomar la condición tal como está? Si es así, ¿debo escribir la consulta en el código de mi aplicación en formato CNF porque es más corta y ordenada o en formato DNF porque ahorra tiempo para el optimizador?
¿de dónde cambiar el texto de la consulta? ¿Puedes publicar una captura de pantalla? – Justin
Lamentablemente, no es una forma fácil de publicar una captura de pantalla (las computadoras en el trabajo son raras). En cuanto a la primera pregunta, estaba en una pestaña de consulta en VS2010 (donde hay cuatro paneles, Diagrama, Criterios, SQL, Resultados) y sobrescribió el SQL que había escrito con el nuevo texto. – Jodaka
Nunca busqué implementaciones concretas de motores SQL, aparte del mío. ^^ Así que no sé si la ejecución de la consulta real se acelerará a través de DNF. Lo que PUEDO decir es que DNF es al menos un enfoque interesante para el almacenamiento en caché. El motor SQL podría transformar la consulta a DNF para poder verificar si la consulta se ha ejecutado antes. Y si es así, quizás las traducciones de consulta de SQL a representaciones nativas o incluso los resultados de la consulta podrían entregarse desde el caché. Pero estoy de acuerdo con Clockwork-Muse y dejaré eso al motor SQL y escribiré una consulta legible yo mismo. – user573215