Vous n'êtes pas identifié(e).

#1 06/01/2011 17:55:56

meles
Membre

Tirage au sort

Bonjour,
  y'a t-il moyen de demander à postgresql de me renvoyer n lignes au hasard dans une requete (a l'instar de limit ou offset) genre select * from ma_table sample 100 pour récuperer 100 lignes au pif !

Cordialement

Hors ligne

#2 06/01/2011 17:59:02

Marc Cousin
Membre

Re : Tirage au sort

Pas simplement non. Et avec de bonnes performances encore moins. Ça a besoin d'être rapide ? smile


Marc.

Hors ligne

#3 06/01/2011 18:05:50

meles
Membre

Re : Tirage au sort

Par nécessairement, c'est pour faire de l'échantillonage occasionel, tirage au sort sans remise.

Faut-il passer par un create function en pl/pgsql ?

Hors ligne

#4 06/01/2011 18:09:34

gleu
Administrateur

Re : Tirage au sort

La seule solution simple à ma connaissance est :

select * from ma_table order by random() limit 100


Guillaume.

Hors ligne

#5 06/01/2011 18:33:52

meles
Membre

Re : Tirage au sort

Bonsoir,
  ça me convient parfaitement en terme de simplicité

Merci beaucoup

Hors ligne

#6 07/01/2011 15:05:17

Marc Cousin
Membre

Re : Tirage au sort

Le défaut de la solution c'est :
- full scan de la table
- calcul d'une fonction random pour chaque enregistrement (c'est coûteux)
- tri sur les enregistrements (c'est aussi très coûteux).

Bref, c'est juste pour dire que ça marche, mais qu'il ne faut vraiment pas l'exécuter toutes les secondes…


Marc.

Hors ligne

#7 07/01/2011 15:51:16

meles
Membre

Re : Tirage au sort

Effectivement, je vois que le temps d'exécution de la requête est long, mais c'est du cas par cas pour tirer une liste de dossier au sort et aller les controler, donc rien de critique en terme de performances.

merci encore à tous

Hors ligne

Pied de page des forums