如何有效地搜索 mysql 数据库中的 json 数据?
我从 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 倍或更多(我从 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 字段吗?还是我的选择语句写得效率低?