首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >where子句中的mysql udf json_extract -如何提高性能

where子句中的mysql udf json_extract -如何提高性能
EN

Stack Overflow用户
提问于 2014-10-31 16:10:17
回答 2查看 9.9K关注 0票数 1

如何有效地在mysql数据库中搜索json数据?

我从labs.mysql.com安装了extract_json udf,并试用了一个包含2.750.000个条目的测试表。

代码语言:javascript
运行
复制
CREATE TABLE `testdb`.`JSON_TEST_TABLE` (
   `AUTO_ID` INT UNSIGNED NOT NULL AUTO_INCREMENT,
   `OP_ID` INT NULL,
   `JSON` LONGTEXT NULL,
PRIMARY KEY (`AUTO_ID`)) $$

示例JSON字段如下所示:

代码语言:javascript
运行
复制
{"ts": "2014-10-30 15:08:56 (9400.223725848107) ", "operation": "1846922"}

我发现将json_extract放入select语句实际上对性能没有影响。也就是说,以下选择(几乎)具有相同的性能:

代码语言:javascript
运行
复制
SELECT * FROM JSON_TEST_TABLE where OP_ID=2000000 LIMIT 10;

SELECT OP_ID, json_extract(JSON, "ts") ts, json_extract(JSON, "operation") operation FROM JSON_TEST_TABLE where OP_ID=2000000 LIMIT 10; 

然而,一旦我将一个json_extract表达式放入where子句中,执行时间就增加了10倍或更多(我从2,5秒增加到30秒):

代码语言:javascript
运行
复制
SELECT OP_ID, json_extract(JSON, "ts") ts, json_extract(JSON, "operation") operation FROM JSON_TEST_TABLE where json_extract(JSON, "operation")=2000000 LIMIT 10;

在这一点上,我认为我需要提取在插入时要搜索的所有信息到单独的列中,并且如果我真的必须在json数据中搜索,我需要首先缩小要通过其他条件搜索的行数,但我希望确保我没有遗漏任何明显的东西。例如,我能以某种方式索引json字段吗?或者是我的select语句写得很低效?

EN

回答 2

Stack Overflow用户

发布于 2017-06-29 03:31:23

事实上,在执行

代码语言:javascript
运行
复制
SELECT * FROM JSON_TEST_TABLE where OP_ID=2000000 LIMIT 10;

json_extract()最多执行10次。

在这个过程中

代码语言:javascript
运行
复制
SELECT OP_ID, json_extract(JSON, "ts") ts, json_extract(JSON, "operation") operation FROM JSON_TEST_TABLE where json_extract(JSON, "operation")=2000000 LIMIT 10;

将对每一行执行json_extract(),结果限制为10条记录,因此速度会有所降低。索引也不会有什么帮助,因为处理时间被外部代码消耗,而不是MySQL的.imho,在这种情况下最好的选择是优化的UDF。

票数 2
EN

Stack Overflow用户

发布于 2015-03-02 17:05:01

你可以试试这个:http://www.percona.com/blog/2015/02/17/indexing-json-documents-for-efficient-mysql-queries-over-json-data/

MySQL的Flexviews物化视图用于使用JSON_EXTRACT将数据从JSON提取到另一个表中,该表可以被索引。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26670022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档