有谁用过MySQL的Json索引吗

Schema::create('user_profiles', function (Blueprint $table) {
            $table->id();
            $table->integer('user_id')->index();
            $table->string('gender')->index();
            $table->string('year')->index();
            $table->string('educational')->string();
            $table->string('work')->nullable();
            $table->string('income')->nullable();
            $table->string('height')->index();
            $table->json('area'); // ['11', '1101', '']
            $table->timestamps();
        });

类似这样的area字段,保存的是一个json数组
我要怎么给里面的第一个列创建一个索引
我直接$table->json(‘area’)->index()会报错
另外,我要怎么进行Mode查询

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 7
Jyunwaa
ALTER TABLE user_profiles ADD COLUMN v_column GENERATED ALWAYS AS (area->"$[0]") VIRTUAL;

CREATE INDEX idx_v_column ON user_profiles (v_column);

先给area数组第一列创建虚拟列,然后在虚拟列上创建索引,这是一个很麻烦的行为,管理维护也很麻烦,MySQL对文档的支持是一坨屎。

顺便说一句,MySQL的查询优化器也是一坨屎。

8个月前 评论
cevin 8个月前

mysql json用来查询不方便。尤其是你的json是数组时[1,2,3]这种。还不支持模糊,必须手动的拼接sql

8个月前 评论

你这种情况想加索引,可以上mongodb

8个月前 评论
orange1994

为什么不把json字段中要加索引的冗余出来呢

8个月前 评论

看了各位的评论,总的来说可以,但是很麻烦,不如不用,哈哈

8个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!