繁体   English   中英

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

[英]How to create index on json array type in mysql5.7

现在我使用 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

你不能,至少是你想要的方式。 JSON 数据类型中,我们可以阅读:

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

因此,随着限制而来的是解决方法;-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM