mysqljson交集_MySQL如何搜索JSON字段中与JSON值相交
的所有⾏
匿名⽤户
来⾃@gordonlinoff的回答给出了正确的结果,但值得⼀提的是,⼤多数使⽤JSON函数的解决⽅案都不能⽤索引进⾏优化。您应该考虑当表变⼤时会发⽣什么。每个查询都将执⾏⼀次表扫描,⽽且随着表的增长,性能会变得越来越差。
EXPLAIN显⽰了这⼀点:+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------------+
| 1 | SIMPLE | projects | NULL | ALL | NULL | NULL | NULL | NULL | 1 | 100.00 | Using where |json值的类型有哪些
+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------------+
(列将与表中的⾏数⼀样⼤)
相反,实现这种查询的⼀种更容易的⽅法是将数据存储在普通的⾏和列中,⽽不是JSON中。每⾏存储⼀个project_id。
然后查询变得更加清晰,并且可以使⽤索引对其进⾏优化:SELECT * FROM projects WHERE project_id IN (1, 2);
我知道您在问题中提到,我们应该把使⽤JSON作为⼀个既定的要求。您有⼀个解决⽅案来得到您所描述的结果。我只想跟其他读者说清楚:
如果您的查询在select-list以外的任何⼦句中引⽤了JSON列,这表明您应该以规范化的形式存储数据,⽽不是以JSON的形式存储数据。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论