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

时间:2017-12-02 09:37:21

标签: mysql json

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

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

2 个答案:

答案 0 :(得分:0)

你不能,至少不是你想要的方式。在The JSON Data Type,我们可以阅读:

  与其他二进制类型的列一样,

JSON列未编入索引   直;相反,您可以在生成的列上创建索引   从JSON列中提取标量值。有关详细信息,请参阅Indexing a Generated Column to Provide a JSON Column Index   示例

因此,限制就是解决方法; - )

答案 1 :(得分:0)

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