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.
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?
Dit is mijn code:

<?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:
Waarom doe je een LIKE bij selecteren van country?
Kan dat handmatig aangepast worden door een gebruiken, of selecteren ze die uit een list?
Ik ben bezig met een script om te zoeken maar dit was puur om te testen.
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

[size=xsmall]Toevoeging op 04/10/2015 14:47:56:[/size]

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.
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.

Reageren