Ik heb een script waarbij ik via jQuery een tabel aanmaak waarin ik heel snel een row kan opzoeken tussen 36.000+ andere rows.
Maar het duurt HEEEEL lang voordat het geladen is.
Weet iemand hoe ik dit kan verbeteren?
De query:
<?php
$sql = "
SELECT
ID,
client_id,
name,
contact
FROM
clients
ORDER BY
name, ID
";
?>
De tabel:
<?php
CREATE TABLE IF NOT EXISTS `clients` (
`ID` int(20) NOT NULL,
`client_id` int(20) NOT NULL,
`name` varchar(255) NOT NULL,
`street` varchar(255) NOT NULL,
`postal` varchar(255) NOT NULL,
`city` varchar(255) NOT NULL,
`country` varchar(255) NOT NULL,
`phone` varchar(255) NOT NULL,
`since` varchar(255) NOT NULL,
`changed` varchar(255) NOT NULL,
`contact` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=36085 DEFAULT CHARSET=latin1;
?>
Heb je vastgesteld dat de laadtijd echt zit in het uitvoeren van de query, of toch ergens anders? Als je heel veel data naar je scherm stuurt, dan kan dat op zichzelf ook al veel tijd kosten.
Dat is ook een hoop HTML.
Probeer, zeker bij zoveel rijen zo min mogelijk HTML te tonen. Des te sneller is je overdracht.
Alle onclick() kunnen er uit. Vang dat af met 1 regel jQuery.
De class= kan er ook uit. Doe dit via table tr td.center a
Haal de title="" weg. Die is leuk, maar wordt in je applicatie toch niet gebruikt (sorry, html-validators)
Verwijder de inline CSS op je <span>
Je gebruikt glyphicon: is die niet traag? Verwijder class="glyphicon ...." eens. Gaat het dan sneller?
Je PHP kan niet veel sneller/beter.
Je SQL wellicht wel door INDEXES, al gebruik je die bij een SELECT * niet echt.
[size=xsmall]Toevoeging op 10/06/2015 19:03:04:[/size]
En als je echt snel wil zoeken: kijk eens naar AJAX en laat de database in de database zoeken ;)
Je PHP kan niet veel sneller/beter.
Je SQL wellicht wel door INDEXES, al gebruik je die bij een SELECT * niet echt.
Je zou om de 100 rijen een ob_flush() of flush() kunnen zetten, zodat de client alvast beeld heeft. Dan is de applicatie nog steeds even traag (strikt genomen zelfs wat trager), maar valt het minder op.
Verder zou je de SELECT-query kunnen uitbreiden met een ORDER BY voor de meest gebruikte sorteervolgorde. De meeste gebruikers sorteren een tabel zó dat ze de belangrijkste rijen bovenaan zien. En dáárop zet je vervolgens ook een INDEX met ASC of DESC.
Aangezien je INT(20) gebruikt in de tabeldefinitie en een PRIMARY KEY ontbreekt, vermoed ik zo dat we niet de hele tabel zien of de tabel inderdaad niet goed is ingedeeld.