mysql - 查询 JSON 对象时 MySQL 查询超时
问题描述
以下查询似乎生成了一个无限循环,因为它在 30 秒后超时。在 C++ 中运行它永远不会返回到代码。
SELECT author_obj->>'$.name' FROM author WHERE author_obj->'$.name' NOT IN
(SELECT DISTINCT author_obj->'$.name'
FROM response INNER JOIN author ON response.author_id = author.id
WHERE response.parent IS NOT NULL
GROUP BY author.id);
内部部分按预期运行,并在 1.5 秒内返回数据库中已回复其他帖子的作者。
查询的目标是找到所有只发布消息但从不回复其他用户的用户,其中用户保存为 JSON 对象。
解决方案
SELECT author_obj->>'$.name'
FROM author
WHERE author_obj->'$.name' NOT IN
(SELECT DISTINCT author_obj->'$.name'
FROM response
INNER JOIN author ON response.author_id = author.id
WHERE response.parent IS NOT NULL
GROUP BY author.id)
这样可能会更快:
SELECT a1.author_obj->>'$.name'
FROM author a1
WHERE NOT EXISTS
(SELECT 1 FROM
FROM response r
INNER JOIN author a2 ON r.author_id = a2.id
WHERE a2.author_obj->'$.name' = a1.author_obj->'$.name'
AND r.parent IS NOT NULL)
(警告:我可能没有正确重构它。)
推荐阅读
- javascript - 使用javascript的切片函数的异步问题
- google-apps-script - 应用程序活动服务不可用
- javascript - 纱线构建在第一行失败,无论那里有什么
- ios - 如何在 Objective-C 中将 UIImage 上传到服务器?
- c - 用scanf C识别“空格”和“输入”
- scala - Flink Scala 作业运行时错误:java.lang.NoSuchMethodError
- javascript - 为什么合并流需要异步完成信号?
- c - 如何查找总成绩,然后使用 qsort() 进行排序
- android - 谷歌地图和视图模型
- date-fns - date-fns utcToZonedTime 有意外的输出