Table des matières
Sélectionnez des lignes aléatoires dans une grande table PostgreSQL
Méthode 1 : utilisez RANDOM() et LIMIT
Méthode 2 : utilisez ORDER BY RANDOM() et LIMIT
Approche efficace : utilisez des colonnes et des index d'identification numérique
Considérations et recommandations
Maison base de données tutoriel mysql Comment sélectionner efficacement des lignes aléatoires dans une grande table PostgreSQL ?

Comment sélectionner efficacement des lignes aléatoires dans une grande table PostgreSQL ?

Jan 21, 2025 am 05:46 AM

How to Efficiently Select Random Rows from a Large PostgreSQL Table?

Sélectionnez des lignes aléatoires dans une grande table PostgreSQL

Lorsque vous travaillez avec de grands ensembles de données, la sélection de lignes aléatoires peut être une tâche gourmande en calcul. Cet article explore différentes méthodes permettant de récupérer des lignes aléatoires à partir d'une table contenant environ 500 millions de lignes, et discute de leurs performances et de leur précision.

Méthode 1 : utilisez RANDOM() et LIMIT

La première méthode consiste à utiliser la fonction RANDOM() pour générer des nombres aléatoires, puis à utiliser la clause LIMIT pour filtrer les résultats afin d'obtenir le nombre de lignes requis.

SELECT * FROM table WHERE RANDOM() < 0.000002 LIMIT 1000;
Copier après la connexion

Cette approche a l'avantage d'être facile à mettre en œuvre, mais peut s'avérer inefficace pour les grandes tables. En raison de la clause LIMIT, la base de données doit analyser toutes les lignes de la table pour sélectionner des lignes aléatoires et ignorer le reste.

Méthode 2 : utilisez ORDER BY RANDOM() et LIMIT

Une autre approche consiste à trier d'abord les lignes par la fonction RANDOM(), puis à utiliser la clause LIMIT pour obtenir des lignes aléatoires.

SELECT * FROM table ORDER BY RANDOM() LIMIT 1000;
Copier après la connexion

Cette méthode est similaire à la première méthode, mais le tri garantit une sélection plus efficace de lignes aléatoires. Il réduit le nombre d'analyses requises, ce qui en fait un meilleur choix pour les grandes tables. Cependant, ce n’est toujours pas le meilleur choix pour les tableaux comportant un nombre extrêmement important de lignes.

Approche efficace : utilisez des colonnes et des index d'identification numérique

Pour les tableaux avec des colonnes d'ID numériques et moins d'espaces, une approche plus efficace peut être utilisée. Cela implique de générer des nombres aléatoires dans une plage d'identifiants et de les utiliser pour se joindre à la table.

WITH params AS (
   SELECT 1 AS min_id,              -- 最小 ID <= 当前最小 ID
        5100000 AS id_span             -- 四舍五入。(max_id - min_id + buffer)
    )
SELECT *
FROM  (
   SELECT p.min_id + trunc(random() * p.id_span)::integer AS id
   FROM   params p, generate_series(1, 1100) g  -- 1000 + buffer
   GROUP  BY 1                        -- 去除重复项
) r
JOIN   table USING (id)
LIMIT  1000;
Copier après la connexion

Cette approche exploite l'accès aux index pour réduire considérablement le nombre d'analyses requises. Il est idéal pour les tableaux comportant un grand nombre de lignes et peu d’espaces dans la colonne ID.

Considérations et recommandations

La meilleure façon de sélectionner des lignes aléatoires dépend des caractéristiques spécifiques de la table et des exigences de performances. Pour les petites tables, les méthodes RANDOM() ou ORDER BY RANDOM() peuvent suffire. Cependant, pour les grandes tables avec des colonnes d'ID numériques et peu d'espaces, il est recommandé d'utiliser la méthode d'optimisation ci-dessus pour de meilleures performances.

Il convient de noter qu'en raison de la nature de la génération de nombres pseudo-aléatoires dans les ordinateurs, aucune de ces méthodes ne peut garantir un véritable caractère aléatoire. Cependant, ils constituent un moyen pratique d’obtenir un échantillon aléatoire de lignes à partir d’une grande table avec une efficacité et une précision raisonnables.

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Réduisez l'utilisation de la mémoire MySQL dans Docker Réduisez l'utilisation de la mémoire MySQL dans Docker Mar 04, 2025 pm 03:52 PM

Réduisez l'utilisation de la mémoire MySQL dans Docker

Comment modifier une table dans MySQL en utilisant l'instruction ALTER TABLE? Comment modifier une table dans MySQL en utilisant l'instruction ALTER TABLE? Mar 19, 2025 pm 03:51 PM

Comment modifier une table dans MySQL en utilisant l'instruction ALTER TABLE?

Comment résoudre le problème de MySQL ne peut pas ouvrir la bibliothèque partagée Comment résoudre le problème de MySQL ne peut pas ouvrir la bibliothèque partagée Mar 04, 2025 pm 04:01 PM

Comment résoudre le problème de MySQL ne peut pas ouvrir la bibliothèque partagée

Exécutez MySQL dans Linux (avec / sans conteneur Podman avec phpmyadmin) Exécutez MySQL dans Linux (avec / sans conteneur Podman avec phpmyadmin) Mar 04, 2025 pm 03:54 PM

Exécutez MySQL dans Linux (avec / sans conteneur Podman avec phpmyadmin)

Qu'est-ce que Sqlite? Aperçu complet Qu'est-ce que Sqlite? Aperçu complet Mar 04, 2025 pm 03:55 PM

Qu'est-ce que Sqlite? Aperçu complet

Exécuter plusieurs versions MySQL sur macOS: un guide étape par étape Exécuter plusieurs versions MySQL sur macOS: un guide étape par étape Mar 04, 2025 pm 03:49 PM

Exécuter plusieurs versions MySQL sur macOS: un guide étape par étape

Quels sont les outils de GUI MySQL populaires (par exemple, MySQL Workbench, PhpMyAdmin)? Quels sont les outils de GUI MySQL populaires (par exemple, MySQL Workbench, PhpMyAdmin)? Mar 21, 2025 pm 06:28 PM

Quels sont les outils de GUI MySQL populaires (par exemple, MySQL Workbench, PhpMyAdmin)?

Comment configurer le cryptage SSL / TLS pour les connexions MySQL? Comment configurer le cryptage SSL / TLS pour les connexions MySQL? Mar 18, 2025 pm 12:01 PM

Comment configurer le cryptage SSL / TLS pour les connexions MySQL?

See all articles