为了优化这个 SQL 查询,可以考虑以下几个方面:\n\n1. 索引优化:确保post.statuspost.idpost_file.post_id列都有适当的索引,以加快查询速度。\n\n2. 子查询优化:将post.id not in (4682,2844,2669)这个子查询改为一个临时表,以提高性能。\n\n3. JOIN 优化:根据业务需求,可以考虑使用 INNER JOIN 替代 LEFT JOIN,以进一步优化查询速度。\n\n4. 投影列优化:只选择需要的列,而不是使用SELECT *,这样可以减少数据传输和处理的开销。\n\n综上所述,优化后的 SQL 查询如下:\n\nsql\nSELECT post.id, post.vote_id, post.title, post.user_id, post.user_nickname, post.ctime, post_text.content, post.ptime, post.ptime_ms, post.view_count, post.status, post.like_count, post.forward_count, post.comment_count, post.type, post.origin_type, post.origin_post_id, post.last_post_id, post.favorite_count, post.post_source, post.fund_forum_id, post.weight_v2\nFROM `post`\nLEFT JOIN post_file ON post.id = post_file.post_id AND post_file.type = 1 AND post_file.status = 0\nJOIN post_text ON post.id = post_text.post_id\nWHERE post.status = 2\n AND post.id NOT IN (SELECT id FROM temp_table) -- 使用临时表替代子查询\n AND post_file.post_id IS NULL\n AND (post.app_module = 0 OR (post.app_module = 1 AND post.recommended = 1))\nGROUP BY post.id\nORDER BY post.weight_v2 DESC, post.ptime_ms DESC, post.id DESC\nLIMIT 20\n\n\n请注意,上述优化方案是基于对查询语句的理解和假设。实际优化效果可能因数据库结构、数据量和环境等因素而有所不同,建议在测试环境中进行性能测试和优化验证。

优化 SQL 查询:提高性能和效率

原文地址: https://www.cveoy.top/t/topic/pSyb 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录