SELECT article_id,channel_name, SUM( CASE type WHEN '0' THEN '1' ELSE '0' END )* 2 + SUM( CASE type WHEN '1' THEN '1' ELSE '0' END ) * 2 + SUM( CASE type WHEN '2' THEN '1' ELSE '0' END )* 3 AS 'score' FROM leadnews_article.user_record WHERE request_time > 2025-05-06 and channel_name ='ps4' GROUP BY article_id ORDER BY score LIMIT 10 这条sql语句如何进行优化?
时间: 2023-06-17 09:03:07 浏览: 83
sql学习之CASE WHEN THEN ELSE END的用法
这条 SQL 语句可以进行如下优化:
1. 对于 WHERE 子句中的日期字符串 '2025-05-06',应该使用单引号括起来,否则可能会引起语法错误。
2. 对于 SUM(CASE...) 的语句可以使用 IF 函数进行替换,这样可以使 SQL 语句更加简洁易读。
3. 对于 GROUP BY 语句,可以添加索引以提高查询速度。
综上所述,可以对该 SQL 语句进行如下优化:
SELECT article_id, channel_name,
SUM(IF(type = '0', 2, 0) + IF(type = '1', 2, 0) + IF(type = '2', 3, 0)) AS score
FROM leadnews_article.user_record
WHERE request_time > '2025-05-06' AND channel_name = 'ps4'
GROUP BY article_id
ORDER BY score
LIMIT 10;
同时,可以为 user_record 表中的 channel_name 和 request_time 列添加索引,以提高查询速度。
阅读全文