首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在mysql5.7中创建json数组类型的索引

问如何在mysql5.7中创建json数组类型的索引
EN

Stack Overflow用户
提问于 2017-12-02 09:37:21
回答 2查看 2.5K关注 0票数 1

现在我使用了像SELECT * FROM user WHERE JSON_CONTAINS(users, '[1]');这样的SQL脚本,但是它会扫描完整的表,效率很低。所以我想在users列上创建索引。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-28 10:23:01

现在可以用MySQL 8+了

下面是一个示例:

代码语言:javascript
复制
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)) );

以这种方式使用:

代码语言:javascript
复制
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

票数 2
EN

Stack Overflow用户

发布于 2017-12-02 10:00:15

你不能,至少不能按你的意愿去做。在JSON数据类型,我们可以读到:

JSON列与其他二进制类型的列一样,不直接进行索引;相反,可以在生成的列上创建索引,从JSON列中提取标量值。有关详细示例,请参见索引生成的列以提供JSON列索引。

因此,限制带来了解决办法;)

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

https://stackoverflow.com/questions/47606464

复制
相关文章

相似问题

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