Ich habe folgende TabellenWie kann ich meinen SQL-Code optimieren?
Kontakte
contact_id | Kontakt_Slug | Kontakt_erster_name | Kontakt_Email | contact_date_added | Firmen-ID | contact_is_active | contact_subscribed | Kontakt_Last_Name | Kontaktfirma | contact_twitter
contact_campaigns
contact_campaign_id | Kontakt-ID | contact_campaign_created | Firmen-ID | contact_campaign_sent
bundle_feedback
bundle_feedback_id | Bündel_ID, Kontakt_ID | Firmen-ID | bundle_feedback_rating | bundle_feedback_favorite_track_id | bundle_feedback_supporting | campaign_id
Bündel
bundle_id | Bündelname | bundle_created | Firmen-ID | bundle_is_active
Spuren
track_id | Firmen-ID | track_title
Ich schrieb diese Abfrage, aber es funktioniert langsam, wie kann ich diese Abfrage optimieren, um es schneller zu machen?
SELECT SQL_CALC_FOUND_ROWS c.contact_id,
c.contact_first_name,
c.contact_last_name,
c.contact_email,
c.contact_date_added,
c.contact_company,
c.contact_twitter,
concat(c.contact_first_name," ", c.contact_last_name) AS fullname,
c.contact_subscribed,
ifnull(icc.sendCampaignsCount, 0) AS sendCampaignsCount,
ifnull(round((ibf.countfeedbacks/sendCampaignsCount * 100),2), 0) AS percentFeedback,
ifnull(ibf.bundle_feedback_supporting, 0) AS feedbackSupporting
FROM contacts AS c
LEFT JOIN
(SELECT c.contact_id,
count(cc.contact_campaign_id) AS sendCampaignsCount
FROM contacts AS c
LEFT JOIN contact_campaigns AS cc ON cc.contact_id = c.contact_id
WHERE c.company_id = '876'
AND c.contact_is_active = '1'
AND cc.contact_campaign_sent = '1'
GROUP BY c.contact_id) AS icc ON icc.contact_id = c.contact_id
LEFT JOIN
(SELECT bf.contact_id,
count(*) AS countfeedbacks,
bf.bundle_feedback_supporting
FROM bundle_feedback bf
JOIN bundles b
JOIN contacts c
LEFT JOIN tracks t ON bf.bundle_feedback_favorite_track_id = t.track_id
WHERE bf.bundle_id = b.bundle_id
AND bf.contact_id = c.contact_id
AND bf.company_id='876'
GROUP BY bf.contact_id) AS ibf ON ibf.contact_id = c.contact_id
WHERE c.company_id = '876'
AND contact_is_active = '1'
ORDER BY percentFeedback DESC LIMIT 0, 25;
vermeiden mehrere Tabellen mehrmals verbinden, die auch, wenn es große Anzahl von Datensatz enthält. – Avi
Korrigieren Sie Ihre 'JOIN'-Klauseln, um nach jedem' JOIN' eine 'ON'-Klausel zu haben. Dadurch wird die Leistung nicht verbessert, die Abfrage wird jedoch verständlicher. –
Müssen Sie wirklich SQL-Befehl verbessern? ha ha ha .. nur verbessern Sie Ihre Geschäftslogik und SQL-Abfrage wird deutlich verbessert werden;). – MaNKuR