Mysql
 sql >> Datenbank >  >> RDS >> Mysql

mysql order by rand() Leistungsproblem und Lösung

Zunächst generieren alle einen Zufallswert von 1 bis MAX(id), nicht 100000000.

Dann gibt es zumindest ein paar gute Lösungen:

  1. Verwenden Sie > nicht =

    SELECT items FROM tablea where status='0' and id>'$id23' LIMIT 1
    

    Erstellen Sie einen Index für (status,id,items) um dies zu einer Nur-Index-Abfrage zu machen.

  2. Verwenden Sie = , aber versuchen Sie es einfach erneut mit einem anderen Zufallswert, wenn Sie keinen Treffer finden. Manchmal braucht es mehrere Versuche, oft aber auch nur einen Versuch. Der = sollte schneller sein, da es den Primärschlüssel verwenden kann. Und wenn es schneller ist und es in 90 % der Fälle in einem Versuch schafft, könnte das die anderen 10 % der Zeit wettmachen, wenn es mehr als einen Versuch braucht. Hängt davon ab, wie viele Lücken Sie in Ihren ID-Werten haben.