Ik ben begonnen aan een oud systeem van een klant weer werkend te maken en traagheid en fouten er uit te halen.
Maar nu kom ik een query tegen welke echt belachelijk lang er over doet om te laden (lees meer dan 27 sec. gemiddeld), en ik heb al meerdere manieren geprobeerd maar ik krijg eigenlijk nooit het zelfde resultaat terug.
Hoe kan ik deze query veranderen zodat hij gewoon sneller wordt?
SELECT
inkoop_caravan.Inkoop_ID,
CONCAT_WS(' ', caravan.Merk, caravan.Type),
CONCAT_WS(' ', klant.tussenvoegsel, klant.Achternaam),
'-',
inkoop_caravan.Inkoopprijs,
inkoop_caravan.Omschrijving,
inkoop_caravan.InkoopDatum,
klant.Klant_ID,
caravan.Caravan_ID
FROM caravan, klant, werknemer, inkoop_caravan
WHERE
(caravan.Caravan_ID = inkoop_caravan.Caravan_ID OR inkoop_caravan.Caravan_ID IS NULL)
AND (klant.Klant_ID = inkoop_caravan.Klant_ID AND inkoop_caravan.Werknemer_ID IS NULL)
AND (inkoop_caravan.Werknemer_ID IS NULL)
AND (caravan.Chassisnummer LIKE '%".mysql_real_escape_string(@$_POST[1])."%' OR caravan.Chassisnummer IS NULL)
AND (CONCAT_WS(' ', caravan.Merk, caravan.Type) LIKE '%".mysql_real_escape_string(@$_POST[6])."%')
AND (klant.Achternaam LIKE '%".mysql_real_escape_string(@$_POST[2])."%' OR klant.Achternaam IS NULL)
AND (inkoop_caravan.Inkoopprijs LIKE '%".mysql_real_escape_string(@$_POST[4])."%' OR inkoop_caravan.Inkoopprijs IS NULL)
AND (inkoop_caravan.Omschrijving LIKE '%".mysql_real_escape_string(@$_POST[5])."%' OR inkoop_caravan.Omschrijving IS NULL)
AND (inkoop_caravan.Inkoopdatum LIKE '%".mysql_real_escape_string(@$_POST['datum'])."%' OR inkoop_caravan.Inkoopdatum IS NULL)
UNION
SELECT
inkoop_caravan.Inkoop_ID,
CONCAT_WS(' ', caravan.Merk, caravan.Type),
'-',
werknemer.Naam,
inkoop_caravan.Inkoopprijs,
inkoop_caravan.Omschrijving,
inkoop_caravan.InkoopDatum,
'-',
caravan.Caravan_ID
FROM caravan, klant, werknemer, inkoop_caravan
WHERE
(caravan.Caravan_ID = inkoop_caravan.Caravan_ID OR inkoop_caravan.Caravan_ID IS NULL)
AND (inkoop_caravan.Klant_ID IS NULL)
AND (werknemer.Werknemer_ID = inkoop_caravan.Werknemer_ID AND inkoop_caravan.Klant_ID IS NULL)
AND (caravan.Chassisnummer LIKE '%".mysql_real_escape_string(@$_POST[1])."%' OR caravan.Chassisnummer IS NULL)
AND (CONCAT_WS(' ', caravan.Merk, caravan.Type) LIKE '%".mysql_real_escape_string(@$_POST[6])."%')
AND (werknemer.Achternaam LIKE '%".mysql_real_escape_string(@$_POST[3])."%' OR werknemer.Achternaam IS NULL)
AND (inkoop_caravan.Inkoopprijs LIKE '%".mysql_real_escape_string(@$_POST[4])."%' OR inkoop_caravan.Inkoopprijs IS NULL)
AND (inkoop_caravan.Omschrijving LIKE '%".mysql_real_escape_string(@$_POST[5])."%' OR inkoop_caravan.Omschrijving IS NULL)
AND (inkoop_caravan.Inkoopdatum LIKE '%".mysql_real_escape_string(@$_POST['datum'])."%' OR inkoop_caravan.Inkoopdatum IS NULL)
UNION
SELECT
inkoop_caravan.Inkoop_ID,
CONCAT_WS(' ', caravan.Merk, caravan.Type),
CONCAT_WS(' ', klant.tussenvoegsel, klant.Achternaam),
werknemer.Naam,
inkoop_caravan.Inkoopprijs,
inkoop_caravan.Omschrijving,
inkoop_caravan.InkoopDatum,
klant.Klant_ID,
caravan.Caravan_ID
FROM caravan, klant, werknemer, inkoop_caravan
WHERE
(caravan.Caravan_ID = inkoop_caravan.Caravan_ID OR inkoop_caravan.Caravan_ID IS NULL)
AND (werknemer.Werknemer_ID = inkoop_caravan.Werknemer_ID AND klant.Klant_ID = inkoop_caravan.Klant_ID)
AND (caravan.Chassisnummer LIKE '%".mysql_real_escape_string(@$_POST[1])."%' OR caravan.Chassisnummer IS NULL)
AND (CONCAT_WS(' ', caravan.Merk, caravan.Type) LIKE '%".mysql_real_escape_string(@$_POST[6])."%')
AND (klant.Achternaam LIKE '%".mysql_real_escape_string(@$_POST[2])."%' OR klant.Achternaam IS NULL)
AND (werknemer.Achternaam LIKE '%".mysql_real_escape_string(@$_POST[3])."%' OR werknemer.Achternaam IS NULL)
AND (inkoop_caravan.Inkoopprijs LIKE '%".mysql_real_escape_string(@$_POST[4])."%' OR inkoop_caravan.Inkoopprijs IS NULL)
AND (inkoop_caravan.Omschrijving LIKE '%".mysql_real_escape_string(@$_POST[5])."%' OR inkoop_caravan.Omschrijving IS NULL)
AND (inkoop_caravan.Inkoopdatum LIKE '%".mysql_real_escape_string(@$_POST['datum'])."%' OR inkoop_caravan.Inkoopdatum IS NULL)
ORDER BY InkoopDatum DESC LIMIT 0,30