mysql - 如何在mysql 5.7中的json数组类型上创建索引

标签 mysql json

现在我使用 SQL 脚本,如 SELECT * FROM user WHERE JSON_CONTAINS(users, '[1]');但它会扫描全表,效率低下。所以我想在 users 列上创建索引。

例如,我有一个名为 users 的列,数据类似于 [1,2,3,4]。请告诉我如何在 JSON 数组类型上设置索引(生成虚拟列)。我读过 MySQL 网站上的文档,他们都谈到使用 JSON_EXTRACT() 函数在 JSON 对象类型中建立索引。

最佳答案

现在 MySQL 8+ 可以实现这一点

这是一个例子:

CREATE TABLE customers (
    id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    modified DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    custinfo JSON
    );

ALTER TABLE customers ADD INDEX comp(id, modified, 
    (CAST(custinfo->'$.zipcode' AS UNSIGNED ARRAY)) );

这样使用:

SELECT * FROM customers 
    ->     WHERE JSON_CONTAINS(custinfo->'$.zipcode', CAST('[94507,94582]' AS JSON));

更多信息: https://dev.mysql.com/doc/refman/8.0/en/create-index.html

关于mysql - 如何在mysql 5.7中的json数组类型上创建索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47606464/

相关文章:

mysql - 从一个mysql表( friend )中选择并按另一个表(用户)中的字段对结果进行排序?

javascript - 使用货币的 json 响应数据填充下拉列表

python - 使用 Python 从 JSON 创建数据结构

json - 如何将 JSON 文档中的字符串值解码为 int 类型的变量?

mysql - 如何在 mysql 中插入两个具有相同服务器时间的日期时间字段?

php - 使用 bindParam 的 SELECT 查询不返回任何内容

php - 如何在另一个查询中使用查询 result() 值[codeigniter]

python - 我应该如何使用 raw_input 编写正确的 SQL 语句

javascript - 从 JSON 文件加载变量到 LESS CSS 预处理器

c - C 中的 JSON 解析器技巧