簡體   English   中英

你能幫忙調整查詢嗎

[英]can you please help in tuning the query

對於25000條記錄,此查詢大約需要45s到1分鍾的時間。我需要替代case條件的expirydate字段

SELECT a.id,
       a.name,
       a.lastname,
       a.plainpass,
       a.email,
       a.custom_usertype,
       a.custom_registertype,
       a.content_state,
       a.year,
       a.bflag,
       a.block,
       a.trail_expiry,
       a.subscribe_date,
       CASE a.custom_usertype
          WHEN (5)
          THEN
             (IF(
                     (SELECT custom_usertype
                        FROM skw_users
                       WHERE id = a.parent_id AND custom_usertype = 11) = 11
                 AND a.custom_registertype = "subscribed",
                 (SELECT DATE_FORMAT(prod.expiry_date, "%Y-%m-%d")
                    FROM skw_product prod
                   WHERE prod.student_id = a.id
                  ORDER BY prod.expiry_date DESC
                   LIMIT 1),
                 IF(
                        (SELECT custom_usertype
                           FROM skw_users
                          WHERE id = a.parent_id AND custom_usertype = 10) =
                           10
                    AND a.custom_registertype = "subscribed",
                    (SELECT DATE_FORMAT(prod.expiry_date, "%Y-%m-%d")
                       FROM skw_product prod
                      WHERE prod.User_id = a.parent_id
                     ORDER BY prod.expiry_date DESC
                      LIMIT 1),
                    (SELECT DATE_FORMAT(trail_expiry, "%Y-%m-%d")
                       FROM skw_users
                      WHERE id = a.parent_id))))
          WHEN (3)
          THEN
             (IF(a.custom_registertype = "subscribed",
                 (SELECT DATE_FORMAT(prod.expiry_date, "%Y-%m-%d")
                    FROM skw_product prod
                   WHERE prod.User_id = a.parent_id
                  ORDER BY prod.expiry_date DESC
                   LIMIT 1),
                 (SELECT DATE_FORMAT(trail_expiry, "%Y-%m-%d")
                    FROM skw_users
                   WHERE id = a.parent_id)))
          ELSE
             (IF(a.custom_registertype = "subscribed",
                 (SELECT DATE_FORMAT(prod.expiry_date, "%Y-%m-%d")
                    FROM skw_product prod
                   WHERE prod.User_id = a.id
                  ORDER BY prod.expiry_date DESC
                   LIMIT 1),
                 (SELECT DATE_FORMAT(trail_expiry, "%Y-%m-%d")
                    FROM skw_users
                   WHERE id = a.id)))
       END
          AS expiry_date_n,
       CASE a.custom_usertype
          WHEN (5)
          THEN
             (SELECT TRIM(NAME)
                FROM skw_users
               WHERE id = a.parent_id AND custom_usertype = 10)
          WHEN (3)
          THEN
             (SELECT TRIM(NAME)
                FROM skw_users
               WHERE id = a.parent_id)
          WHEN (10)
          THEN
             (SELECT TRIM(NAME)
                FROM skw_users
               WHERE id = a.id AND a.custom_usertype = 10)
       END
          AS schoolname
  FROM    `skw_users` AS a
       INNER JOIN
          skw_user_usergroup_map AS map2
       ON map2.user_id = a.id
 WHERE map2.group_id = 2
GROUP BY a.id
ORDER BY trim(a.name) ASC

對於25000條記錄,此查詢大約需要45s到1分鍾的時間。我需要替代case條件的expirydate字段

嘗試在Primary Key列( a.id和您要應用案例的列( a.custom_usertype上添加索引

希望這會加快查詢的執行速度:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM