2010-08-17 6 views
1

Je dois obtenir 1-2 lignes à partir du résultat de la requête renvoyé avec SQL select sur les colonnes indexées sans obtenir le jeu d'enregistrements complet.Ligne aléatoire à partir du résultat de la grande requête

Par exemple, je vais récupérer 10 000 enregistrements en utilisant la requête

SELECT * FROM table WHERE field 1>1 AND field1 < 10 

mais je dois seulement 1 ligne aléatoire de cette requête concernant à Highload de ma base de données.

Je peux utiliser

SELECT * FROM table WHERE field 1>1 AND field1 < 10 LIMIT 100, 1 

Mais je ne sais pas d'enregistrements numebr d'utiliser la gamme correcte compensé

Comment puis-je atteindre cet objectif?

+0

Il y a beaucoup d'idées ici: http://jan.kneschke.de/projects/mysql/order-by-rand/ –

Répondre

0

Vous pouvez utiliser ORDER BY RAND()

SELECT * FROM table WHERE field1 > 1 AND field1 < 10 ORDER BY RAND() LIMIT 1 

Cela renverra 1 rang au hasard avec field1 entre 1 et 10

+0

Sur la base de données avec 10KK enregistrements seront votre serveur et tous les utilisateurs en vrac; - – Pavel

+0

Cest vrai. Ensuite, vous devrez utiliser deux requêtes comme décrites dans cet article: http://www.titov.net/2005/09/21/do-not-use-order-by-rand-or-how-to-get- random-rows-from-table/ – JochenJung

+0

count (*) pas une variante sur les gros résultats de requête mysql, il faudra quelques secondes pour calculer calc (*) avec WHERE sur une table de 1kk row. J'ai quelques idées, mais je ne suis pas encore sûr de leur exactitude. – Pavel

0

Que diriez-vous de restreindre les enregistrements que vous sélectionnez en premier lieu?

SELECT * FROM table WHERE field1 IN (CONVERT(RAND()*10,SIGNED),CONVERT(RAND()*10,SIGNED)) LIMIT 2 
+0

J'ai des critères sur field1 comment puis-je le choisir? – Pavel

+0

Si le critère est une plage, vous pouvez créer un nombre aléatoire qui tomberait dans cette plage – KMW

+0

mais il y a beaucoup de lignes dans cette sélection même si j'ai choisi des critères et je ne devrais pas prendre d'abord mais aléatoire. En tout cas merci de m'avoir poussé sur une idée intéressante aussi. – Pavel

Questions connexes