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