Hallo
Ik ben op zoek naar - weet niet of het mogelijk is - een manier om meerdere rijen met offset op te halen.
Bijvoorbeeld rij 10, 35, 41 ( getallen zijn steeds willekeurig ) - Kan dat met slechts één query ?
Groeten
Wesley
- MySQL - Query met meerdere offsets
-
11-01-2015, 20:10 #1
- Berichten
- 940
- Lid sinds
- 15 Jaar
MySQL - Query met meerdere offsets
-
In de schijnwerper
[SNELLE LEVERING] Laat je website / webshop snel en professioneel bouwen!Freelance / Werk(SEO) Tekstschrijver nodig voor winstgevende teksten?Freelance / WerkGezocht: Linkopties Installatie / Duurzaamheid / Groen / Energie / WonenOverige dealsBlogpost op thuissportschool.nl met DR53 en 1000+ organische bezoekers per maandOverige deals -
11-01-2015, 20:51 #2
- Berichten
- 122
- Lid sinds
- 19 Jaar
Re: MySQL - Query met meerdere offsets
Hey,
Wanneer het gaat om willekeurige rijen dan kun je ook RAND() gebruiken.
Code:SELECT * FROM table ORDER BY RAND() LIMIT 10;
Code:SELECT * FROM ( SELECT * FROM table ORDER BY RAND() LIMIT 10 ) ORDER BY id ASC
Groeten,
Gerron
-
11-01-2015, 20:55 #3
64BitsWebhosting.EU
- Berichten
- 2.085
- Lid sinds
- 18 Jaar
Re: MySQL - Query met meerdere offsets
Ja, dat kan, maar performancetechnisch zou ik het niet doen.
je kunt een subquery maken waarbij je een een teller voor de records genereert en daar overheen een query met de waarden die je wilt hebben. (even aangenomen dat de waarden geen id's zijn, anders selecteer je gewoon met een 'id in (10,35,41)'
Heb je geen id dan wordt het een klein rampje. Ik heb niet getest of onderstaande werkt als een subquery en hij is zeker nog iets te optimaliseren door de velden niet in de subquery te selecteren, maar voor de leesbaarheid heb ik het zo even laten staan. Het gaat maar om het idee tenslotte.
set @tel=0;
select * from (select @tel:=@tel+1 as rownum, veld1, veld2 from tabel1) as bladibla where rownum in (10,35,41)
-
11-01-2015, 22:01 #4
- Berichten
- 1.410
- Lid sinds
- 16 Jaar
Re: MySQL - Query met meerdere offsets
@john, wat is er performance technisch mis met de RAND functie?
Subqueries zijn inderdaad wel een flink stuk trager.
-
11-01-2015, 22:06 #5
- Berichten
- 122
- Lid sinds
- 19 Jaar
Re: MySQL - Query met meerdere offsets
RAND moet uitgevoerd worden en de waarde is vooraf niet beschikbaar.
Een index gebruiken gaat dan niet echt.
Dus bij veel rijen is het niet echt fijn.
-
11-01-2015, 22:13 #6
64BitsWebhosting.EU
- Berichten
- 2.085
- Lid sinds
- 18 Jaar
Re: MySQL - Query met meerdere offsets
Ook al was mijn performance opmerking niet op de rand() gericht maar op mijn eigen subquery voorbeeld, een rand kan wel een performance ramp zijn.
Buiten wat Gerron zegt, kan de query ook niet gecached worden, werkt op de HELE tabel, gebruikt tijdelijk tabellen en flinke sorteerslagen en uiteindelijk ook flink wat ram en dan ga je met een aantal concurrent users zeker merken.
-
12-01-2015, 00:14 #7
- Berichten
- 1.410
- Lid sinds
- 16 Jaar
Re: MySQL - Query met meerdere offsets
Ja dat klopt, maar wat is het verschil met deze query dan?
Edit:
Oke, ik heb de queries getest: you're right.
Bij een tabel met 2000 rows is rand() (verwaarloosbaar) sneller.
Bij een tabel met 15.000 rows is jou query 3x sneller.
Bij een tabel met 600.000 rows is jouw query 7x snellerLaatst aangepast door Wilbert E. : 12-01-2015 om 00:32
-
12-01-2015, 02:12 #8
64BitsWebhosting.EU
- Berichten
- 2.085
- Lid sinds
- 18 Jaar
Re: MySQL - Query met meerdere offsets
Ow, ik zei niet dat mijn subquery sneller is. In feite zou je alleen de teller en een id moeten gebruiken in de subquery, daarna pas joinen met de rest van de velden in de bovenliggende query om het nog iets sneller te maken.
Maar mijn voorbeeld gebruikt een letterlijke offset (als je nog even een order by in de subquery gooit) waarbij 10,35 en 41 dus het 10de, 35ste en 41ste record zijn. (TS zegt niet hoe ie aan die verschillende waarden komt tenslotte, is het echt willekeurig of is het telkens anders als gevolg van een ander onderdeel in het process?). Denk aan bv. het 10de record uit een lijst gesorteerd op datum of whatever.
Als het echt random records moeten zijn dan kun je ook wel een rand() gebruiken bij kleinere tabellen of even googlen voor veel snellere versies om rand() te vervangen.
-
12-01-2015, 08:40 #9
- Berichten
- 940
- Lid sinds
- 15 Jaar
Re: MySQL - Query met meerdere offsets
@ Gerron Mulder
Bedankt voor uw reactie! Tot enkele dagen geleden werkte ik inderdaad met RAND() wat precies deed wat ik wou. Het is zo dat mijn database ondertussen +350.000 records telt en RAND() voor een enorme vertraging zal zorgen ... ( bijna 8 seconden sneller zonder RAND )
Hey,
Wanneer het gaat om willekeurige rijen dan kun je ook RAND() gebruiken.
Code:SELECT * FROM table ORDER BY RAND() LIMIT 10;
Code:SELECT * FROM ( SELECT * FROM table ORDER BY RAND() LIMIT 10 ) ORDER BY id ASC
Groeten,
Gerron
-
12-01-2015, 09:02 #10
- Berichten
- 940
- Lid sinds
- 15 Jaar
Re: MySQL - Query met meerdere offsets
@ John Timmer
Ik beschik helaas niet over kolom met een unieke ID.
Uw query heb ik geprobeerd en het werkt ! Bedankt voor de oplossing !
Ja, dat kan, maar performancetechnisch zou ik het niet doen.
je kunt een subquery maken waarbij je een een teller voor de records genereert en daar overheen een query met de waarden die je wilt hebben. (even aangenomen dat de waarden geen id's zijn, anders selecteer je gewoon met een 'id in (10,35,41)'
Heb je geen id dan wordt het een klein rampje. Ik heb niet getest of onderstaande werkt als een subquery en hij is zeker nog iets te optimaliseren door de velden niet in de subquery te selecteren, maar voor de leesbaarheid heb ik het zo even laten staan. Het gaat maar om het idee tenslotte.
set @tel=0;
select * from (select @tel:=@tel+1 as rownum, veld1, veld2 from tabel1) as bladibla where rownum in (10,35,41)Laatst aangepast door WesleyVN : 12-01-2015 om 09:07
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic