Ok,
J'ai beaucoup lu sur le retour d'un ensemble de rangées aléatoires l'année dernière, et la solution que nous avons trouvée est la suivante
ORDER BY newid()
Cela convient pour les rangs de moins de 5 000. Mais lorsque nous obtenons >10-20k lignes, nous obtenons des time outs SQL, l'exécution planifiée me dit que 76% du coût de ma requête provient de cette ligne. et la suppression de cette ligne augmente la vitesse d'un ordre de grandeur lorsque nous avons une grande quantité de lignes.
Nos utilisateurs ont besoin de traiter jusqu'à 100 000 lignes à la fois de cette manière.
Pour vous donner un peu plus de détails.
Nous disposons d'un tableau contenant 2,6 millions de codes alphanumériques à 4 chiffres. Nous utilisons un ensemble aléatoire de ces codes pour entrer dans un lieu. Par exemple, si nous organisons un événement d'une capacité de 5 000 personnes, un ensemble aléatoire de 5 000 de ces codes sera tiré de la table et remis à chaque client sous forme de code-barres, puis l'application de lecture de codes-barres à l'entrée aura la même liste de 5 000. La raison de l'utilisation d'un code alphanumérique à 4 chiffres (et non d'un numéro stupidement long comme un GUID) est qu'il est facile pour les gens de noter le numéro (ou de l'envoyer par SMS à un ami) et de l'apporter pour le faire entrer manuellement, donc nous ne voulons pas d'une grande quantité de caractères. Les clients adorent la dernière partie.
Y a-t-il un meilleur moyen que ORDER BY newid()
ou existe-t-il un moyen plus rapide d'obtenir 100 000 lignes aléatoires à partir d'une table de 2,6 millions de lignes ?
Oh, et nous utilisons MS SQL 2005.
Merci,
Jo