刚刚发现程序里有一个语句,是一个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
本站文章未经文下加注授权不得拷贝发布。