现在我使用像SELECT * FROM user WHERE JSON_CONTAINS(users, '[1]');
这样的SQL脚本但是它会扫描全表,效率很低。所以我想在users
列上创建索引。
例如,我有一个名为users
的列,数据看起来像[1,2,3,4]
。请告诉我如何在JSON数组类型(生成虚拟列)上设置索引。我在MySQL网站上阅读过该文档,他们都谈到了使用JSON_EXTRACT()
函数在JSON对象类型中建立索引。
答案 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