Solution à une jointure qui consomme du temps et de la mémoire
Bonjour,
Voici le code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| // Execute our SQL statement and return the result
$sql = "
SELECT entreprises.id, entreprises.Nom, DateDebutActivites, SIRET
FROM entreprises
LEFT JOIN dirigeants
ON (entreprises.id = dirigeants.IdEntreprise)
WHERE 0=0
AND (
(entreprises.Nom LIKE '%" . $terms . "%')
OR (DenominationSociale LIKE '%" . $terms . "%')
OR (NomCommercial LIKE '%" . $terms . "%')
OR (Enseigne LIKE '%" . $terms . "%')
OR (Sigle LIKE '%" . $terms . "%')
OR (SIRET LIKE '%" . $terms . "%')
OR (dirigeants.Nom LIKE '%" . $terms . "%')
)
GROUP BY entreprises.id
$limitClause";
$query = $this->db->query($sql); |
Avec les 2 tables de 1000 lignes au total, ça marche mais avec la base de données complète (les 2 tables à 70000 lignes), le script ne se finit pas même au bout de 3 mn et fait planter la machine.
En fait c'est la dernière condition OR (dirigeants.Nom LIKE LIKE '%" . $terms . "%') qui est problématique.
Comme vous pouvez le voir, ce bout de code est utilisé pour une recherche donc une recherche qui ne donne pas de résultat au bout de 15 secondes maximum n'est pas intéressant.
Je me demande si un SELECT UNION pourrait bien être la solution.