Skip and Take en SQL : un équivalent LINQ
Les méthodes .Skip() et .Take() de LINQ offrent un moyen pratique de travailler avec un sous-ensemble de données en mémoire. Toutefois, dans les situations où la source de données sous-jacente est une base de données SQL volumineuse, il est souvent préférable d'effectuer ces opérations directement dans SQL plutôt qu'en mémoire. Cela évite la surcharge liée au transfert de grandes quantités de données en mémoire.
Un de ces scénarios est celui où vous devez sélectionner une plage spécifique de lignes dans une table de base de données. LINQ fournit les méthodes .Skip() et .Take() à cet effet, mais existe-t-il un équivalent SQL direct ?
SQL Server 2012 et supérieur
SQL Server 2012 et versions ultérieures ont introduit une nouvelle syntaxe pour le décalage et la limitation des lignes :
OFFSET (@Skip) ROWS FETCH NEXT (@Take) ROWS ONLY
Pour sélectionner des lignes 1000-1100 d'une table spécifique, vous utiliseriez la requête suivante :
SELECT * FROM Sales.SalesOrderHeader ORDER BY OrderDate OFFSET 1000 ROWS FETCH NEXT 100 ROWS ONLY
Cette requête effectuera les étapes suivantes :
Cette solution est bien plus efficace que d'effectuer la même opération en mémoire, car cela évite d'avoir à sélectionner toutes les lignes, pour ensuite supprimer les 1 000 premières et sélectionner les 100 suivantes manuellement.
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!