Bonjour,
Sur un formulaire, je saisi le début d'un nom et avec ajax j'alimente une liste de sélection.
Je me pose des questions sur la meilleur façon d'optimiser mes tables pour être le plus performant possible dans la lecture de mes tables.
J'ai 2 tables : clients et clients_adresses.
L'identifiant commun au 2 tables est "id_client".
Dans ma table clients j'ai 3 champs sur lesquels je souhaite faire ma recherche de nom :
- client_raison_sociale
- client_nom
- client_prenom
Je concataine les 3 champs pour pouvoir faire une recherche sur "dupont philippe"
Ma table clients a un index constitué des champs client_raison_sociale, client_nom, client_prenom
Voici ma requête
Ma base fait 400 000 enregistrements et lorsque je fais une requête le temps de réponses est de plus de 1" voir 2".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 SELECT clients.id_client, client_raison_sociale, client_service, client_nom, client_prenom, client_code_postal, client_ville FROM clients LEFT OUTER JOIN clients_adresses USING ( id_client ) WHERE CONCAT(client_raison_sociale, ' ', client_nom, ' ', client_prenom) LIKE '%dupont philippe%' AND ( CURDATE( ) <= client_adr_date_fin OR client_adr_date_debut <= CURDATE( ) AND client_adr_date_fin = '0000-00-00' ) ORDER BY client_raison_sociale, client_nom, client_prenom limit 0, 10
Comment optimiser ma requête ?
Merci d'avance.
Partager