sql >> Database teknologi >  >> RDS >> Mysql

mysql ordre efter rand() ydeevne problem og løsning

Først og fremmest genererer alle en tilfældig værdi fra 1 til MAX(id), ikke 100000000.

Så er der i hvert fald et par gode løsninger:

  1. Brug > ikke =

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

    Opret et indeks på (status,id,items) for at gøre dette til en indeksforespørgsel.

  2. Brug = , men prøv bare igen med en anden tilfældig værdi, hvis du ikke finder et hit. Nogle gange vil det tage flere forsøg, men ofte vil det kun tage et forsøg. = bør være hurtigere, da den kan bruge den primære nøgle. Og hvis det er hurtigere og får det i et forsøg 90 % af tiden, kan det kompensere for de andre 10 % af tiden, når det tager mere end et forsøg. Afhænger af hvor mange huller du har i dine id-værdier.



  1. Sådan beregnes forskellen mellem to datoer i SQLite

  2. Hvordan omdøber jeg et indeks i MySQL

  3. Håndtering af en PostgreSQL Commitfest

  4. Hvordan kan jeg matche de sidste to ord i en sætning i PostgreSQL?