Matérialisation intermédiaire avec SELECT TOP 100 percent
Avant SQL Server 2005, une technique appelée « matérialisation intermédiaire » pouvait être utilisée pour forcer SQL Server pour honorer une clause ORDER BY dans une définition de vue en incluant TOP 100 PERCENT dans SELECT
Cependant, son utilisation s'est étendue au-delà des définitions de vues dans les instructions SQL dynamiques. L'objectif principal de SELECT TOP 100 PERCENT dans ce contexte est de tirer parti de la matérialisation intermédiaire. Cette technique consiste à créer un jeu de résultats intermédiaire en plaçant la clause ORDER BY dans la construction TOP 100 PERCENT.
Un exemple où cette technique peut être bénéfique est lorsque vous devez appliquer un filtre sur les résultats d'une requête imbriquée. . Considérons la requête suivante :
SELECT foo FROM (SELECT foo FROM MyTable WHERE ISNUMERIC (foo) = 1) bar WHERE CAST(foo AS int) > 100
Dans cet exemple, la requête interne renvoie un ensemble de résultats qui est ensuite filtré dans la requête externe. Cependant, la clause ORDER BY dans la requête interne peut ne pas être honorée, ce qui entraîne des résultats imprévisibles.
En ajoutant SELECT TOP 100 PERCENT à la requête interne, vous pouvez forcer la matérialisation intermédiaire :
SELECT foo FROM (SELECT TOP 100 PERCENT foo FROM MyTable WHERE ISNUMERIC (foo) = 1 ORDER BY foo) bar WHERE CAST(foo AS int) > 100
Cette matérialisation intermédiaire garantit que l'ensemble de résultats de la requête interne est ordonné avant d'être filtré dans la requête externe, fournissant ainsi le résultat souhaité. résultat.
Il est important de noter que cette technique ne doit être utilisée que lorsque cela est nécessaire et avec prudence, car des modifications dans les configurations du serveur (par exemple, niveau de correctif, schéma, index, nombre de lignes) pourraient potentiellement perturber sa fonctionnalité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!