sql >> Databasteknik >  >> RDS >> Mysql

mysql order by rand() prestandaproblem och lösning

Först och främst genererar alla ett slumpmässigt värde från 1 till MAX(id), inte 100000000.

Sedan finns det åtminstone ett par bra lösningar:

  1. Använd > inte =

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

    Skapa ett index på (status,id,items) för att göra detta till en indexfråga.

  2. Använd = , men försök bara igen med ett annat slumpmässigt värde om du inte hittar en träff. Ibland tar det flera försök, men ofta tar det bara ett försök. = bör vara snabbare eftersom den kan använda primärnyckeln. Och om det är snabbare och får det på ett försök 90 % av tiden, kan det kompensera för de andra 10 % av tiden när det tar mer än ett försök. Beror på hur många luckor du har i dina id-värden.



  1. Att få resultatet av dynamisk SQL till en variabel för sql-server

  2. Förklaring av JSONB introducerad av PostgreSQL

  3. MySQL INFOGA I ... VÄRDEN och VÄLJ

  4. Påverkar kolumnordning prestanda i Microsoft SQL Server 2012?