0
我有以下查詢,它用於創建用戶填充其信息的距離的百分比。我將它作爲視圖存儲,但查詢需要大約6分鐘才能運行1500個用戶。我怎樣才能加快這個查詢?大規模查詢的優化
它將用作查詢,每當用戶處於非活動狀態時,該查詢將每天運行一次。我們目前正在迅速擴大我們的用戶羣,我只是擔心它將完全錯誤的15,000用戶。
所以請MySQL大師的,我求求你的幫助!
CREATE VIEW profile_check AS(
SELECT users.id,
FORMAT((IF(
COUNT(users.firstname)+
COUNT(users.lastname)+
COUNT(users.gender)+
COUNT(users.country)+
COUNT(users.address_one)+
COUNT(users.city)+
COUNT(users.zipcode)+
COUNT(users.housenumber)+
COUNT(users.phonenumber)+
COUNT(users.educationlevel_id) = 10, 1, 0) +
IF(
COUNT(assesspassionresults.user_id) > 0, 1, 0) +
IF(
COUNT(assessmentcompetencyresults.user_id) > 0, 1, 0) +
IF(
COUNT(assessmentstrengthresults.user_id) > 0, 1, 0) +
IF(
SUM(CASE WHEN timelines.component_of = "employer" THEN 1 ELSE 0 END) > 0, 1, 0) +
IF(
SUM(CASE WHEN timelines.component_of = "individual" THEN 1 ELSE 0 END) > 0, 1, 0) +
IF(
COUNT(interests.user_id) > 0, 1, 0) +
IF(
COUNT(skills.user_id) > 0, 1, 0) +
IF(
COUNT(users_mediafiles.user_id) > 0, 1, 0))/9 , 0) as profiel_check
FROM users
LEFT JOIN assesspassionresults
ON users.id = assesspassionresults.user_id
LEFT JOIN assessmentcompetencyresults
ON users.id = assessmentcompetencyresults.user_id
LEFT JOIN assessmentstrengthresults
ON users.id = assessmentstrengthresults.user_id
LEFT JOIN timelines
ON users.id = timelines.user_id
LEFT JOIN interests
ON users.id = interests.user_id
LEFT JOIN skills
ON users.id = skills.user_id
LEFT JOIN users_mediafiles
ON users.id = users_mediafiles.user_id
GROUP BY users.id);
的EXPLAIN
要獲得有用的答案,您至少需要發佈架構和EXPLAIN;一個SQLFiddle會更好。 –
除了缺少解釋(可能缺少索引):你確定你正在得到正確的結果嗎?您的查詢看起來像它不會給你我想你想得到的。或者說:我想你的支票在任何時候都會給你88,9%的價值。 – Solarflare
@NevilleK我在EXPLAIN中添加了,不知道這存在。 @ Solar Im獲得預期的結果,如果我只爲一個用戶運行它。 – Adam