优化查询速度

This commit is contained in:
cjy 2026-02-13 09:49:14 +08:00
parent 58bb294435
commit e82cfd8861

View File

@ -183,12 +183,15 @@ balance_sum AS (
cw_agg AS (
SELECT
aw.user_id,
COUNT(CASE WHEN cw.work_category = 2 AND cw.deleted_at = 0 AND (cw.origin_uuid = '' OR cw.origin_uuid IS NULL) AND cw.submit_time BETWEEN aw.start_at AND aw.expired_at THEN 1 END) AS uploaded_video_count,
COUNT(CASE WHEN cw.work_category = 1 AND cw.deleted_at = 0 AND (cw.origin_uuid = '' OR cw.origin_uuid IS NULL) AND cw.submit_time BETWEEN aw.start_at AND aw.expired_at THEN 1 END) AS uploaded_post_count,
COUNT(CASE WHEN cw.work_category = 2 AND cw.cost = 1 AND cw.deleted_at = 0 AND (cw.origin_uuid = '' OR cw.origin_uuid IS NULL) AND cw.submit_time BETWEEN aw.start_at AND aw.expired_at THEN 1 END) AS released_video_consumed,
COUNT(CASE WHEN cw.work_category = 1 AND cw.cost = 1 AND cw.deleted_at = 0 AND (cw.origin_uuid = '' OR cw.origin_uuid IS NULL) AND cw.submit_time BETWEEN aw.start_at AND aw.expired_at THEN 1 END) AS released_post_consumed
COUNT(CASE WHEN cw.work_category = 2 THEN 1 END) AS uploaded_video_count,
COUNT(CASE WHEN cw.work_category = 1 THEN 1 END) AS uploaded_post_count,
COUNT(CASE WHEN cw.work_category = 2 AND cw.cost = 1 THEN 1 END) AS released_video_consumed,
COUNT(CASE WHEN cw.work_category = 1 AND cw.cost = 1 THEN 1 END) AS released_post_consumed
FROM active_windows aw
LEFT JOIN cast_work cw ON cw.artist_phone COLLATE utf8mb4_general_ci = aw.phone COLLATE utf8mb4_general_ci
AND cw.deleted_at = 0
AND (cw.origin_uuid = '' OR cw.origin_uuid IS NULL)
AND cw.submit_time BETWEEN aw.start_at AND aw.expired_at
GROUP BY aw.user_id
),
@ -196,10 +199,13 @@ cw_agg AS (
cwa_agg AS (
SELECT
aw.user_id,
COUNT(CASE WHEN cwa.deleted_at = 0 AND (cwa.work_analysis_status IS NULL OR cwa.work_analysis_status != 1) AND cwa.submit_time BETWEEN UNIX_TIMESTAMP(aw.start_at) AND UNIX_TIMESTAMP(aw.expired_at) THEN 1 END) AS uploaded_data_count,
COUNT(CASE WHEN cwa.cost = 1 AND cwa.deleted_at = 0 AND (cwa.work_analysis_status IS NULL OR cwa.work_analysis_status != 1) AND cwa.submit_time BETWEEN UNIX_TIMESTAMP(aw.start_at) AND UNIX_TIMESTAMP(aw.expired_at) THEN 1 END) AS released_data_consumed
COUNT(CASE WHEN 1 THEN 1 END) AS uploaded_data_count,
COUNT(CASE WHEN cwa.cost = 1 THEN 1 END) AS released_data_consumed
FROM active_windows aw
LEFT JOIN cast_work_analysis cwa ON cwa.artist_phone COLLATE utf8mb4_general_ci = aw.phone COLLATE utf8mb4_general_ci
AND cwa.deleted_at = 0
AND (cwa.work_analysis_status IS NULL OR cwa.work_analysis_status != 1)
AND cwa.submit_time BETWEEN UNIX_TIMESTAMP(aw.start_at) AND UNIX_TIMESTAMP(aw.expired_at)
GROUP BY aw.user_id
),
@ -207,10 +213,12 @@ cwa_agg AS (
ccr_agg AS (
SELECT
aw.user_id,
COUNT(CASE WHEN ccr.deleted_at = 0 AND ccr.submit_time BETWEEN aw.start_at AND aw.expired_at THEN 1 END) AS uploaded_report_count,
COUNT(CASE WHEN ccr.cost = 1 AND ccr.deleted_at = 0 AND ccr.submit_time BETWEEN aw.start_at AND aw.expired_at THEN 1 END) AS released_report_consumed
COUNT(CASE WHEN 1 THEN 1 END) AS uploaded_report_count,
COUNT(CASE WHEN ccr.cost = 1 THEN 1 END) AS released_report_consumed
FROM active_windows aw
LEFT JOIN cast_competitive_report ccr ON ccr.artist_phone COLLATE utf8mb4_general_ci = aw.phone COLLATE utf8mb4_general_ci
AND ccr.deleted_at = 0
AND ccr.submit_time BETWEEN aw.start_at AND aw.expired_at
GROUP BY aw.user_id
),
@ -231,10 +239,12 @@ cvs_agg AS (
tar_agg AS (
SELECT
aw.user_id,
COUNT(CASE WHEN tar.status = 1 AND tar.deleted_at = 0 AND tar.created_at BETWEEN aw.start_at AND aw.expired_at THEN 1 END) AS progress_task_count,
COUNT(CASE WHEN tar.status = 2 AND tar.deleted_at = 0 AND tar.created_at BETWEEN aw.start_at AND aw.expired_at THEN 1 END) AS complete_task_count
COUNT(CASE WHEN tar.status = 1 THEN 1 END) AS progress_task_count,
COUNT(CASE WHEN tar.status = 2 THEN 1 END) AS complete_task_count
FROM active_windows aw
LEFT JOIN ` + "`" + taskSchema + "`" + `.task_assign_records tar ON tar.sub_num COLLATE utf8mb4_general_ci = aw.customer_num COLLATE utf8mb4_general_ci
AND tar.deleted_at = 0
AND tar.created_at BETWEEN aw.start_at AND aw.expired_at
GROUP BY aw.user_id
),
@ -325,7 +335,11 @@ LEFT JOIN assigned_pending_agg apa ON apa.user_id = aw.user_id`
whereClause = " WHERE " + strings.Join(whereParts, " AND ")
}
countSQL := cte + " SELECT COUNT(DISTINCT aw.customer_num) " + fromClause + whereClause
countFromClause := "FROM active_windows aw"
if req != nil && req.LastTaskAssignee != "" {
countFromClause += "\nLEFT JOIN task_mgmt tm ON tm.user_id = aw.user_id"
}
countSQL := cte + " SELECT COUNT(DISTINCT aw.customer_num) " + countFromClause + whereClause
var total int64
if err := app.ModuleClients.BundleDB.Raw(countSQL, args...).Scan(&total).Error; err != nil {
return nil, 0, commonErr.ReturnError(err, "查询总数失败", "查询艺人上传统计总数失败: ")