sql >> Database >  >> RDS >> Mysql

mysql-volgorde op rand() prestatieprobleem en oplossing

Genereer allereerst een willekeurige waarde van 1 tot MAX(id), niet 100000000.

Dan zijn er in ieder geval een paar goede oplossingen:

  1. Gebruik > niet =

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

    Maak een index op (status,id,items) om dit een alleen-index-query te maken.

  2. Gebruik = , maar probeer het gewoon opnieuw met een andere willekeurige waarde als je geen hit vindt. Soms zijn er meerdere pogingen nodig, maar vaak is er maar één poging nodig. De = zou sneller moeten zijn omdat het de primaire sleutel kan gebruiken. En als het sneller is en het 90% van de tijd in één keer lukt, kan dat de andere 10% van de tijd goedmaken wanneer het meer dan één poging kost. Hangt af van hoeveel hiaten je hebt in je id-waarden.



  1. Mysql-opslagengine voor logtabel

  2. Typ conversie. Wat moet ik doen met een PostgreSQL OID-waarde in libpq in C?

  3. 3 manieren om de positie van een subtekenreeks binnen een tekenreeks in MySQL te vinden

  4. Hoe transaction_timestamp() werkt in PostgreSQL