Maison > base de données > tutoriel mysql > Comment puis-je générer efficacement des séquences de nombres dans SQL à l'aide d'une UDF ou d'une table auxiliaire ?

Comment puis-je générer efficacement des séquences de nombres dans SQL à l'aide d'une UDF ou d'une table auxiliaire ?

Patricia Arquette
Libérer: 2025-01-22 16:46:11
original
922 Les gens l'ont consulté

How Can I Efficiently Generate Number Sequences in SQL Using a UDF or Auxiliary Table?

Génération de séquences de nombres en SQL : UDF et tables auxiliaires

Besoin de générer efficacement des séquences de nombres dans vos requêtes SQL ? Évitez les boucles complexes ou les CTE récursifs ; exploitez plutôt la puissance des fonctions définies par l’utilisateur (UDF) ou des tables auxiliaires. Cette approche offre des avantages en termes de simplicité et de performances.

Méthode 1 : Fonction définie par l'utilisateur (UDF)

Cet UDF génère une séquence numérique dans une plage spécifiée :

<code class="language-sql">CREATE FUNCTION GetNumberSequence (
    @Start INT,
    @End INT
)
RETURNS TABLE AS
BEGIN
    RETURN (
        SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS N
        FROM sys.all_columns AS ac1
        CROSS JOIN sys.all_columns AS ac2
        WHERE ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) BETWEEN @Start AND @End
    );
END;</code>
Copier après la connexion

Cette fonction prend une valeur de départ (@Start) et une valeur de fin (@End) en entrée. La fonction ROW_NUMBER() attribue un numéro unique à chaque ligne et la CROSS JOIN génère efficacement la séquence.

Exemple d'utilisation :

Pour générer des nombres de 1 à 100 :

<code class="language-sql">SELECT * FROM GetNumberSequence(1, 100);</code>
Copier après la connexion

Méthode 2 : Table auxiliaire permanente

Pour les séquences fréquemment utilisées, une table auxiliaire permanente offre des performances supérieures. Créez un tableau comme celui-ci :

<code class="language-sql">CREATE TABLE dbo.Numbers (
    N INT PRIMARY KEY
);

INSERT INTO dbo.Numbers (N)
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL))
FROM sys.all_columns AS ac1
CROSS JOIN sys.all_columns AS ac2;</code>
Copier après la connexion

Cela crée un tableau (dbo.Numbers) contenant une grande séquence de nombres. Vous pouvez ensuite facilement interroger cette table pour récupérer la séquence souhaitée.

Choisir la bonne méthode

Les deux méthodes sont efficaces. L'UDF est idéale pour la génération de séquences uniques, tandis que la table auxiliaire permanente est idéale pour les séquences fréquemment consultées, offrant des gains de performances significatifs. Le choix dépend des exigences spécifiques de votre application et de la fréquence de génération de séquences.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal