子查询用in导致全表扫描

SELECT
    `id`,
    `intro`,
    `skin_type`,
    `kol_label`,
    `city`,
    `fans_total`,
    `home_page_link`,
    `opened_star`,
    `opened_window`,
    `bs_case`,
    `current_quote`,
    `account_id`,
    `is_partner`,
    `opened_cart`,
    `platform_code`,
    `artist_id`,
    created_at 
FROM
    publication_items 
WHERE
    id IN (
    SELECT
        MAX( id ) 
    FROM
        `publication_items` 
    WHERE
        `artist_id` IN ( 'artzf1bl6qo8wmckumwrybed5eab0a71', 'artzf1beelslri3ygivucbee16ae72ca' ) 
        AND `year` = '2022' 
        AND `month` <= '11' 
    GROUP BY
        platform_code,
        artist_id 
    ORDER BY
        `year` DESC,
        `month` DESC 
    )
explain 结果

子查询用in导致全表扫描

索引全失效,有无优化方法?

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 7
weidachui

zhuanlan.zhihu.com/p/58291123 看下mysql执行流程,mysql子查询返回结果集是未知的。

2周前 评论

你的索引是啥呢?

另外,这个代码有啥用吗?

ORDER BY
        `year` DESC,
        `month` DESC 
2周前 评论
weidachui 2周前
晏南风 (楼主) 2周前
wxf666 (作者) 2周前
晏南风 (楼主) 2周前
chowjiawei

MAX( id ) 你还想让他走索引

2周前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!