如何在mysql数据库中高效地搜索json数据?mysql udf json_extract in where子句 - 如何提高性能
我从labs.mysql.com安装了extract_json udf,并用2.750.000条目的测试表进行了测试。
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场看起来像这样:
{"ts": "2014-10-30 15:08:56 (9400.223725848107) ", "operation": "1846922"}
我发现,把json_extract成select语句几乎没有性能影响。 也就是说以下选择(几乎)具有相同的性能:
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倍以上(I选自2,5-去至30秒):
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字段吗?或者,我的选择陈述书写效率低下?
这应该是一个评论 – Jakar 2015-11-23 18:08:58