Toon posts:

[MySQL] Random Record selecteren

Pagina: 1
Acties:

Verwijderd

Topicstarter
code:
1
SELECT kolom FROM tabel ORDER BY RAND() LIMIT 5;


Zorgt ervoor dat ik steeds 5 willekeurige records uit mijn tabel te zien krijg.
Echter is dit een verschrikkelijke trache actie op 5 miljoen records.

code:
1
5 rows in set (1 min 22.70 sec)


Met google en de search heb ik niets kunnen vinden om dit sneller te krijgen. Ik heb wel een index aangemaakt en dit scheelt iets.

code:
1
SELECT kolom FROM tabel WHERE MATCH (kolom1, kolom2) AGAINST ("waarde" IN BOOLEAN MODE) ORDER BY RAND() LIMIT 5;


Deze methode is een stuk sneller, net als andere bewerkingen op een index.

code:
1
5 rows in set (27.72 sec)


Dit is nog steeds niet te doen als je een webpagina bezoekt en je moet steeds een halve minuut wachten voor de pagina verschijnt. Weet iemand misschien hier nog een manier voor om dit te versnellen.

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 13:32
Misschien gewoon 10 getallen met PHP genereren en die er uit halen met id=IN(2,5,9,7,5) Als je er minder dan 5 terug krijgt voer je nog een simpel query uit. Anders neem je er gewoon 5 uit de resultaatset die je hebt.

Verwijderd

Topicstarter
djluc schreef op 11 augustus 2004 @ 13:43:
Misschien gewoon 10 getallen met PHP genereren en die er uit halen met id=IN(2,5,9,7,5) Als je er minder dan 5 terug krijgt voer je nog een simpel query uit. Anders neem je er gewoon 5 uit de resultaatset die je hebt.
Wordt IN niet gebruikt als een tegenhanger van INNER JOIN?

Kan wel doen:

select * from tabel where id=1 or id=3 or id=9;

[ Voor 9% gewijzigd door Verwijderd op 11-08-2004 14:12 ]


  • Shadowman
  • Registratie: Januari 2002
  • Niet online
Verwijderd schreef op 11 augustus 2004 @ 14:09:
[...]


Wordt IN niet gebruikt als een tegenhanger van INNER JOIN?
Hoezo tegenhanger :?.
Kan wel doen:

select * from tabel where id=1 or id=3 or id=9;
Dat is dus hetzelfde wat IN ook doet met IN(1, 3, 9) :).

  • pjonk
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Daarbij maken veel DBMS'en bij OR geen gebruik van indexen, maar bij het gebruik van IN wel. ;)

It’s nice to be important but it’s more important to be nice


Verwijderd

Topicstarter
select * from tabel where id=IN(1,3,7);

ERROR 1064: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'IN(1,3,7)' at line 1

MySQL.com wordt je ook niet veel wijzer van.

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 13:32
JonkieXL schreef op 11 augustus 2004 @ 14:20:
Daarbij maken veel DBMS'en bij OR geen gebruik van indexen, maar bij het gebruik van IN wel. ;)
Idd. Daarnaast is in voor dit soort vergelijkingen bedoeld en gewoonweg veel handiger omdat je dan alleen maar een komma seperated lijstje hoeft te maken.

Verwijderd

Topicstarter
djluc schreef op 11 augustus 2004 @ 13:43:
Misschien gewoon 10 getallen met PHP genereren en die er uit halen met id=IN(2,5,9,7,5) Als je er minder dan 5 terug krijgt voer je nog een simpel query uit. Anders neem je er gewoon 5 uit de resultaatset die je hebt.
" id=IN(2,5,9,7,5)" moet zijn "id IN(2,5,9,7,5) "

dus zonder =, nu werkt het prima, dank je

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 13:32
Verwijderd schreef op 11 augustus 2004 @ 14:41:
[...]
" id=IN(2,5,9,7,5)" moet zijn "id IN(2,5,9,7,5) "
dus zonder =, nu werkt het prima, dank je
Ik neem aan dat het met de snelheid nu ook goed zit?

Verwijderd

Topicstarter
djluc schreef op 11 augustus 2004 @ 14:44:
[...]
Ik neem aan dat het met de snelheid nu ook goed zit?
Jah, dat gaat stukken beter... ipv 30sec is het nu 0.03 sec.
Pagina: 1