Wordpress wpdb get_results langzaam laden query bij 1000 records

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Van Sebas

Van Sebas

16/06/2021 09:04:53
Quote Anchor link
Beste phpers,

Ik ben bezig om een aparte pagina in mijn Wordpress omgeving aan te maken en daarin wil ik via een aantal queries gegevens ophalen uit mijn MySQL database en deze dan op de pagina tonen. Nu is dat geen probleem maar ik loop met mijn query tegen een probleem aan wanneer die query meer dan 1000 records ophaalt dan duurt dat ongelofelijk lang op de betreffende pagina (dit terwijl als ik de query in phpmyadmin uitvoer deze in 0.000038 seconden klaar is).

Dit is mijn select query die ik heb:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$wpdb->get_results("SELECT * FROM randomized WHERE datum = '". $datum ."' AND getal LIKE '%1' ORDER BY id ASC");


En ik heb dit dan met alle getallen dus ook in LIKE '%2' en LIKE '%3' enz.
Maar op een pagina waar hij met een specifieke datum maar 100 records laat zien per getal gaat alles goed maar ik heb nu een pagina waar hij per getal 1100 records moet laten zien maar dan krijg ik een melding dat de pagina niet geladen kan worden. Als ik dan alle queries wegrem en alleen die van LIKE '%1' over hou dan wordt de pagina na een lange tijd eindelijk geladen met de juiste gegevens. Maar alle queries uitvoeren gaat hem niet worden.

Als ik in de query over een LIMIT 250 set werkt de pagina wel (na lang laden) maar dan mis ik data.

Is er een mogelijkheid om dit probleem op één of andere manier te omzeilen zodat alle records wel geladen worden en snel (niet dat je er 10+ seconden voor hoeft te wachten).
 
PHP hulp

PHP hulp

01/12/2021 03:34:14
 
- Ariën -
Beheerder

- Ariën -

16/06/2021 09:39:03
Quote Anchor link
- Waarom haal je alle velden op?
- En zit er op je grote hoeveelheid rijen die je ophaalt ook een paginering?
- En voer je nog meer dingen uit bij het het doorlopen van de records? Als dit nog een querie is, dan kan ik mij indenken waarom het traag loopt.
 
Van Sebas

Van Sebas

16/06/2021 17:17:20
Quote Anchor link
Waarom haal je alle velden op?
Omdat er 5 kolommen zijn die ik allemaal laat zien op de pagina.

En zit er op je grote hoeveelheid rijen die je ophaalt ook een paginering?
Nee, het liefst wil ik alle resultaten op één lange pagina tonen.

En voer je nog meer dingen uit bij het het doorlopen van de records?
De onderstaande queries zijn alle queries die ik uitvoer, en na het ophalen laat ik alle kolommen zien via een foreach, meer niet.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$wpdb->get_results("SELECT * FROM randomized WHERE datum = '". $datum ."' AND getal LIKE '%1' ORDER BY id ASC");

$wpdb->get_results("SELECT * FROM randomized WHERE datum = '". $datum ."' AND getal LIKE '%2' ORDER BY id ASC");

$wpdb->get_results("SELECT * FROM randomized WHERE datum = '". $datum ."' AND getal LIKE '%3' ORDER BY id ASC");

$wpdb->get_results("SELECT * FROM randomized WHERE datum = '". $datum ."' AND getal LIKE '%4' ORDER BY id ASC");

$wpdb->get_results("SELECT * FROM randomized WHERE datum = '". $datum ."' AND getal LIKE '%5' ORDER BY id ASC");

$wpdb->get_results("SELECT * FROM randomized WHERE datum = '". $datum ."' AND getal LIKE '%6' ORDER BY id ASC");

$wpdb->get_results("SELECT * FROM randomized WHERE datum = '". $datum ."' AND getal LIKE '%7' ORDER BY id ASC");

$wpdb->get_results("SELECT * FROM randomized WHERE datum = '". $datum ."' AND getal LIKE '%8' ORDER BY id ASC");

$wpdb->get_results("SELECT * FROM randomized WHERE datum = '". $datum ."' AND getal LIKE '%9' ORDER BY id ASC");

$wpdb->get_results("SELECT * FROM randomized WHERE datum = '". $datum ."' AND getal LIKE '%0' ORDER BY id ASC");



Of zal het veel meer snelheid schelen als ik een query gebruik waarin ik alles ophaal en dan met een php if then else statement ga werken om de gegevens te tonen?
 
- Ariën -
Beheerder

- Ariën -

16/06/2021 17:39:36
Quote Anchor link
Ja, onnodige queries in een loop moet je zoveel mogelijk vermijden.
 
Ivo P

Ivo P

26/10/2021 11:29:10
Quote Anchor link
Ik zie dat het topic al wat ouder is, maar mocht nog iemand dat zo willen doen:

Je kunt dan beter 1 query uitvoeren, waarbij je niet filtert op eindcijfer, maar erop sorteert.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT *, mod(getal, 10) AS eindcijfer
FROM randomized
WHERE datum = '". $datum ."'
ORDER BY
    MOD(getal, 10) ASC,
    id ASC


Dat voert maar 1x een query uit.
NB: als je eindcijfer 0 per se op de laatste plek wilt hebben, dan kun je mod(getal-1, 10) gebruiken.

Je kunt dan zelf in PHP bijhouden of het eindcijfer anders is dan de vorige regel die je weergaf.

Al is het nu nog de vraag of de vertraging uit het aantal query's zelf komt, of door de overhead van Wordpress.

--edit: ik had and getal like .. nog in de query laten staan.

Ik ga er wel vanuit dat "getal" ook werkelijk een numeriek getal bevat.

MOD(x, 10) zal x delen door 10, bijvoorbeel 136 / 10 en dan de rest terug geven. In dit geval 6.
Gewijzigd op 26/10/2021 16:38:30 door Ivo P
 
Ad Fundum

Ad Fundum

26/10/2021 15:15:25
Quote Anchor link
De vragensteller geeft aan dat phpMyAdmin precies 0,000038 seconden doet over 1 zo'n query. Volgens simpele logica doen 10 van zulke queries er 0,000380 seconden over. Maar het laden van de resultaten in Wordpress duurt langer dan 10,000000 seconden. Waarom dan de focus op de query?

Het enige dat de bottleneck kan zijn is I/O, als elke regel bijvoorbeeld vele megabytes aan informatie bevat. Anders is gewoon dat templating-gebeuren in Wordpress aan verbetering toe.
 
Ivo P

Ivo P

26/10/2021 15:47:24
Quote Anchor link
Dat gaf ik aan met mijn opmerking over de overhead van Wordpress.

Maar met 1 query scheelt dat in elk geval 9 x de route van de query naar de omgeving waar WP de query uitvoert en de resultset weer tot een array oid. verbouwt.
 
Ozzie PHP

Ozzie PHP

26/10/2021 16:24:17
Quote Anchor link
Ad Fundum op 26/10/2021 15:15:25:
Waarom dan de focus op de query?

Omdat het daar in eerste instantie al niet goed gaat. Lijkt me dus een logische verbetering.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.