【发布时间】:2021-12-28 08:42:47
【问题描述】:
可以使用多值索引或虚拟列索引在数组元素上创建索引。是否可以在数组元素的子字段上创建索引?例如
create table link
(
id bigint not null primary key,
...
left json not null
)
左列结构:
[{
"fieldId": 123, ...
}]
多值索引:查询时可以创建但不能使用
ALTER TABLE link ADD INDEX IDX_LEFT_FIELD( (CAST(`left`->'$[*].fieldId' AS unsigned ARRAY)) );
虚拟列:可以创建,但每行的left_field_id列产生值0而不是子字段fieldId的值
ALTER TABLE link
ADD COLUMN `left_field_id` bigint GENERATED ALWAYS AS (`left`->'$[*].fieldId') Virtual NULL AFTER `left`;
不知道上面的说法有什么问题吗?
【问题讨论】:
-
提供完整的例子(最好的方法)。
-
JSON 的模式在我看来相当静态。您应该考虑不要滥用 JSON,而是使用关系方式,例如(查找和/或链接)表和列。这至少也会使索引更容易。
标签: mysql arrays json indexing multivalue