entraîne une surcharge j'ai une requête SQL assez complexe et je ne sais pas comment le faire moins complexe. Si j'essaie de l'exécuter, cela surchargera le db. Si je simplifie un peu, je peux l'exécuter mais cela prend beaucoup de temps. Je suis sûr qu'il existe des moyens beaucoup plus efficaces pour écrire cette requête, mais je n'ai aucune idée de comment. Serait très heureux si quelqu'un pouvait me conduire dans la bonne direction!MySQL Query avec trois tables syndiqués indexé et un-gauche rejoindre DB
SELECT master.C_MASTER_ID,
master.C_MASTER_SUMMARY,
master.C_MASTER_START,
master.C_MASTER_END,
master.C_MASTER_LEVEL,
master.C_MASTER_SOURCE,
NULL AS EVT_HAS_Z,
master.C_MASTER_NOTES,
master.C_MASTER_SERVICE,
c2c.CER_CUSTOMER
FROM `C_MASTER` master
LEFT JOIN `c2customer` c2c ON c2c.CER_ID = master.C_MASTER_ID
WHERE
master.C_MASTER_END >= NOW()
AND master.C_MASTER_START >= DATE_SUB(NOW(), INTERVAL 21 DAY)
UNION ALL
SELECT EVT_ID AS C_MASTER_ID,
EVT_SUMMARY,
EVT_START_DATE,
EVT_END_DATE,
NULL AS C_MASTER_LEVEL,
NULL AS C_MASTER_SOURCE,
EVT_HAS_Z,
NULL AS C_MASTER_NOTES,
NULL AS C_MASTER_SERVICE,
NULL AS CER_CUSTOMER
FROM C_event
WHERE EVT_end_date >= NOW()
UNION ALL
SELECT 'WHISPER' AS C_MASTER_CHANGE_ID,
WISP_SUMMARY,
WISP_START_DATE,
WISP_END_DATE,
NULL AS C_MASTER_LEVEL,
NULL AS C_MASTER_SOURCE,
NULL AS EVT_HAS_Z,
NULL AS C_MASTER_NOTES,
NULL AS C_MASTER_SERVICE,
NULL AS CER_CUSTOMER
FROM C_wispering
WHERE WISP_END_DATE >= NOW()
Ceci est une petite version simplifiée de ma requête, car otherwhise il aurait été à peine pour managable demander après d'aide.
Quels sont votre nombre de lignes en provenance de la db environ? À quoi ressemblent vos index? sur quels champs et ainsi de suite? – Tikkes
@Tikkes environ 6000 lignes environ. Je n'ai que C_MASTER_ID et CER_ID indexés. J'ai été réticent avec les index parce que je ne sais tout simplement pas beaucoup à ce sujet. Y a-t-il des inconvénients à indexer plus de champs? – sardine
Vous devriez vraiment envisager de lire sur les index dans ce cas. La documentation SQL est exhaustive à ce sujet et peut s'avérer extrêmement utile pour traiter des bases de données plus complexes. Les index peuvent être extrêmement bons lorsqu'ils sont utilisés correctement et améliorer les performances d'une tonne. Bien sûr, mettre des index sur tout ou n'importe quoi a des inconvénients, c'est pourquoi vous devriez mettre des index sur les champs souvent nécessaires ou souvent utilisés dans les requêtes de recherche, aussi les index combinés peuvent être utilisés à votre avantage la plupart du temps. [Documentation sur les index] (https://msdn.microsoft.com/en-us/library/ms175049.aspx) – Tikkes