Lang wachten op resultaten van database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Marthijn Buijs

Marthijn Buijs

04/10/2015 12:29:53
Quote Anchor link
Beste mensen,

Ik heb een tabel met gegevens van mensen met 340.000+ rows.
Alleen ik moet erg lang wachten voordat ik me resultaten op een pagina krijg, ookal is het maar wachten op 2 resultaten.

Ik selecteer maar één veld in mijn query.
De tabel-engine is InnoDB.

Hebben jullie tips voor mij?
Alvast bedankt.
Gewijzigd op 04/10/2015 12:36:45 door Marthijn Buijs
 
PHP hulp

PHP hulp

18/04/2024 02:05:10
 
Joni Fleischer
Moderator

Joni Fleischer

04/10/2015 12:36:58
Quote Anchor link
Je zult even wat meer gegevens moeten geven.

Plaats even de code die je gebruikt om je resultaten op te vragen en een overzicht van columns in het tabel?
 
Marthijn Buijs

Marthijn Buijs

04/10/2015 12:48:42
Quote Anchor link
Dit is mijn code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php

$db
= new MySQLi('localhost', 'root', '', 'database');

$query = $db->query('SELECT country FROM users WHERE country LIKE "%netherlands%" GROUP BY country ORDER BY country');

while($data = $query->fetch_object()) {
    echo $data->country . '<br />';
}


?>


Structuur:
Afbeelding
Gewijzigd op 04/10/2015 12:48:55 door Marthijn Buijs
 
Joni Fleischer
Moderator

Joni Fleischer

04/10/2015 13:03:08
Quote Anchor link
Waarom doe je een LIKE bij selecteren van country?
Kan dat handmatig aangepast worden door een gebruiken, of selecteren ze die uit een list?
 
Marthijn Buijs

Marthijn Buijs

04/10/2015 13:12:25
Quote Anchor link
Ik ben bezig met een script om te zoeken maar dit was puur om te testen.
 
Ivo P

Ivo P

04/10/2015 14:43:28
Quote Anchor link
Met where country = 'netherlands' zal het al iets beter gaan

Maar je slaat kennelijk 3400000 keer de hele string op?
Beter om een losse tabel met landen te hanteren en in de grote tabel alleen naar het nummer van het land te verwijzen . Foreign key.

Vergelijken met where country_id = 31

Zeker als dat dan ook nog een index is, zal dat sneller gaan

Toevoeging op 04/10/2015 14:47:56:

Daarnaast misbruik je group by om je dubbele resultaten te verdoezelen.

Bij nader inzien :

Je zoekt dus niet de users maar de landen die netherlands in de naam hebben.
Zoeken in de landen tabel Is dan msec werk. Hooguit nog met een join op de grote tabel om te zien of ze voorkomen.
 
Robert Steegh

Robert Steegh

06/10/2015 21:54:46
Quote Anchor link
De query lijkt me nogal onzinnig. Bij een genormaliseerde database zou ik een losse tabel met Country code en Country verwachten. Indien je toch deze query wil uitvoeren is het aanmaken van index op het veld Country de enige oplossing. LET wel op dat een LIKE statement startend met % geen index kan gebruiken, omdat de database dan op een vrije tekst moet zoeken.
 



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.