Ich habe eine Tabelle mit mehr als 800K rows
. Ich versuche zufällig 4 IDs zu bekommen. Meine Abfrage funktioniert schnell, aber manchmal gibt es eine, manchmal zwei und manchmal keine Ergebnisse. Irgendeine Idee warum? HierLIMIT gibt nicht immer die gleiche Anzahl von Zeilen zurück
ist die Abfrage:
select * from table
where (ID % 1000) = floor(rand() * 1000)
AND `type`='5'
order by rand()
limit 4
die type='5'
nur 1603
Zeilen und es nicht immer geben Sie mir 4 Reihen. wenn ich es in type='11'
ändern, funktioniert es gut. Irgendeine Idee, wie man das repariert?
hier ist mein Code in Yü
$criteria = new CDbCriteria();
$criteria->addCondition('`t`.`id` % 1000 = floor(rand() * 1000)');
$criteria->compare('`t`.`type`', $this->type);
$criteria->order = 'rand()';
$criteria->limit = 4;
return ABC::model()->findAll($criteria);
PS: ein großen und wachsenden Tisch zu sein, wird
Wenn Sie eine schnelle Abfrage benötigen, dann verwenden Sie nicht 'rand' in' MySQL' – DarkBee
Related: http://StackOverflow.com/Questions/1823306/Mysql-Alternatives-Torrender-Brand- – topher