[MySQL]member of 不走索引

刚刚发现程序里有一个语句,是一个unique主键 member of(返回json数组的子查询),但它就是不走主键索引,接着我把子查询换成了一个手写的json串,像这样

SELECT
    tag_id
FROM
    tags FORCE INDEX ( tag_id_unique ) 
WHERE
    tag_id member of (JSON_EXTRACT( '[1,2,3]', '$' ))

发现即使是指定了索引也还是不走索引,可能member of就是这样的机制? 目前原因还不清楚,于是我先用了另一个办法。

就是用 JSON_TABLE 函数把json数组转成一个表,然后用join来过滤数据,效果极佳

SELECT
	tag_id
FROM
	tags
	RIGHT JOIN ( 
		SELECT tag_id
		FROM records, 
		JSON_table ( struct, '$.tags[*]' COLUMNS ( tag_id INT path '$' )) AS T
		WHERE rid = ?
	) AS T2 USING ( tag_id );

 



本文发布于 https://luojia.me

本站文章未经文下加注授权不得拷贝发布。

本博客使用Disqus评论系统,如果看不到评论框,请尝试爬墙。