1 PRIMARY c ALL NULL NULL NULL NULL 1491 100.00 Using where; Using temporary; Using filesort 1 PRIMARY cgb ref contact_id contact_id 4 crmtal_crm.c.id 2 100.00 1 PRIMARY crd ALL NULL NULL NULL NULL 236 100.00 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 1102 100.00 1 PRIMARY c_gr ref contactpersoon_id contactpersoon_id 4 crmtal_crm.c.id 3 100.00 2 DERIVED contactgegevens index status PRIMARY 4 NULL 1767 62.31 Using where
Query was de volgende:
Ik heb INDEXES op alle ID's van de tabellen en daarnaast nog op de status van de contactgegevens. Bovenstaande query is iets uitgebreider dan mijn oorspronkelijke voorbeeld om het oorspronkelijke voorbeeld overzichtelijk te houden.PHP Code:
EXPLAIN EXTENDED
SELECT
SQL_CALC_FOUND_ROWS
c.id,
c.melding,
DATE_FORMAT(c.datum, '%d-%m-%Y') AS datum,
c.status,
cg.bedrijfsnaam,
TRIM(CONCAT(cg.voornaam, ' ', CONCAT(cg.tussenvoegsel, ' ', cg.naam))) AS volledige_naam,
cg.voornaam,
cg.tussenvoegsel,
cg.naam,
cg.woonplaats,
cgb.gebruiker_id AS toegewezen_aan,
c_gr.contactgroep_id AS contactgroep,
DATE_FORMAT(crd.datum, '%d-%m-%Y') AS crd_datum
FROM
contactpersonen AS c
LEFT JOIN
contact_gebruikers AS cgb
ON
c.id = cgb.contact_id
LEFT JOIN
contactregel_datums AS crd
ON
crd.veld_id = '1' && crd.status != '9' && crd.contact_id = c.id
LEFT JOIN
(SELECT `contact_id`, `bedrijfsnaam`, `voornaam`, `tussenvoegsel`, `naam`, `woonplaats` FROM `contactgegevens` WHERE `status` < '5' ORDER BY `id` DESC) as `cg`
ON cg.contact_id = c.id
LEFT JOIN
contact_groepen AS c_gr
ON
c.id = c_gr.contactpersoon_id
WHERE
c.parent_id = '0' && c.status != '9'
GROUP BY
c.id
ORDER BY
cg.naam, cg.voornaam ASC
Ik kan me zo voorstellen dat er nog een INDEX moet op de c.parent_id en c.status.
De overige LEFT JOINS zijn amper gevuld met data en lijken me daarom minder belangrijk.
Iemand een idee wat de tabel "DERIVED2" precies is?
- Complexe MySQL query
-
24-09-2015, 08:07 #16
- Berichten
- 71
- Lid sinds
- 17 Jaar
Re: Complexe MySQL query
Laatst aangepast door N P : 24-09-2015 om 08:21
-
24-09-2015, 08:48 #17
- Berichten
- 71
- Lid sinds
- 17 Jaar
Re: Complexe MySQL query
Ik zie dat de query-tijd nu nog 0.24 sec is, nadat ik deze velden ook een INDEX heb gegeven:
crd.status&& crd.contact_id
Het toevoegen van een INDEX op c.parent_id en c.status heeft vrijwel geen effect.
-
24-09-2015, 09:23 #18
64BitsWebhosting.EU
- Berichten
- 2.085
- Lid sinds
- 18 Jaar
Re: Complexe MySQL query
Derived is de select die je tussen haakjes hebt staan :)
-
24-09-2015, 09:27 #19
- Berichten
- 71
- Lid sinds
- 17 Jaar
-
24-09-2015, 09:35 #20
64BitsWebhosting.EU
- Berichten
- 2.085
- Lid sinds
- 18 Jaar
Re: Complexe MySQL query
Een subselect resultaat kan geen indexen gebruiken omdat het select-resultaat eigenlijk een tijdelijke tabel is (die met geluk in memory wordt gehouden, en met pech even op disk komt te staan) en aangezien die tabel on-the-fly wordt gemaakt, is daar geen index op aangemaakt.
-
24-09-2015, 09:48 #21
- Berichten
- 71
- Lid sinds
- 17 Jaar
Re: Complexe MySQL query
Een subselect resultaat kan geen indexen gebruiken omdat het select-resultaat eigenlijk een tijdelijke tabel is (die met geluk in memory wordt gehouden, en met pech even op disk komt te staan) en aangezien die tabel on-the-fly wordt gemaakt, is daar geen index op aangemaakt.
Zien jullie nog mogelijke verbeteringen m.b.t. de INDEXES?
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