现在我使用了像SELECT * FROM user WHERE JSON_CONTAINS(users, '[1]');这样的SQL脚本,但是它会扫描完整的表,效率很低。所以我想在users列上创建索引。
例如,我有一个名为users的列,数据看起来像[1,2,3,4]。请告诉我如何设置JSON数组类型的索引(生成虚拟列)。我在MySQL网站上读过文档,他们都谈到使用JSON_EXTRACT()函数以JSON对象类型建立索引。
发布于 2019-10-28 10:23:01
现在可以用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
发布于 2017-12-02 10:00:15
你不能,至少不能按你的意愿去做。在JSON数据类型,我们可以读到:
JSON列与其他二进制类型的列一样,不直接进行索引;相反,可以在生成的列上创建索引,从JSON列中提取标量值。有关详细示例,请参见索引生成的列以提供JSON列索引。
因此,限制带来了解决办法;)
https://stackoverflow.com/questions/47606464
复制相似问题