当前位置: 首页 > news >正文

mysql8多值索引

  MySQL8新出了一个多值索引,我还没体验过呢,今天试一试。

建表

  我先建个表试一试多值索引的效果。我粗略地看了下多值索引的介绍,发现是只适用于数组类型的。所以我建一个含有数组字段的表试一试。语法还是挺麻烦的:

create table student(id bigint primary key auto_increment,name varchar(32),tags JSON,index student_tags((cast(json_extract(`tags`, _utf8mb4'$') as char(32) array)))
);

测试

  我插入数据试一试,如下:

insert into student(name, tags) value ('小张', '["女生","成绩差"]');
select * from student where '女生' member of (tags);

  果然能查出数据。
在这里插入图片描述
  但是还是要看看执行计划,我对比了两种写法,一个是用json的路径,虽然我的数组是保存在json的根路径下,但是我还是写一个$符号代表根。

explain select * from student where '女生' member of (tags->'$');

  从结果上看,是用到了索引。
在这里插入图片描述
  但是如果不使用$符号,就没命中索引。SQL改成:

explain select * from student where '女生' member of (tags);

在这里插入图片描述

原因

  出现那种情况,跟我创建索引的语句有关,我现在换种写法建个新表:

create table student1(id bigint primary key auto_increment,name varchar(32),tags JSON,index student_tags((cast((`tags`) as char(32) array)))
);
insert into student1(name, tags) value ('小张', '["女生","成绩差"]');
explain select * from student1 where '女生' member of (tags);

  这个执行计划就显示命中了索引:
在这里插入图片描述

http://www.lryc.cn/news/396560.html

相关文章:

  • MT3055 交换排列
  • Zkeys三方登录模块支持QQ、支付宝登录
  • 数字探秘:用神经网络解密MNIST数据集中的数字!
  • 11个IT运维领域必考证书,每一个都含金量极高
  • VScode 常用插件
  • 299k stars利用Public APIs提升开发效率:探索APILayer提供的开源资源
  • 在目标检测数据集上微调Florence-2
  • AI提示词:AI辅导「数学作业」
  • odoo文档的安装
  • 02STM32软件安装新建工程
  • 社区6月月报 | Apache DolphinScheduler重要修复和优化记录
  • Docker 使用基础(2)—镜像
  • Docker学习笔记(三)Dockerfile
  • 学懂C#编程:C# 索引器(Indexer)的概念及用法
  • 汇川CodeSysPLC教程03-2-14 与HMI通信
  • centos部署jar包
  • CSS相对定位和绝对定位的区别
  • SpringCloud之nacos共享配置文件实现多数据源灵活切换
  • 原生小程序生成二维码方法之一
  • Kubernetes k8s Pod容器 探针 健康探测
  • Conformal low power-2.电源感知等效性检查
  • 【密码学】从有限状态自动机到密钥流生成器
  • 3.相机标定原理及代码实现(opencv)
  • Centos7 安装Docker步骤及报错信息(不敢说最全,但是很全)
  • 【C语言】符号优先级详解
  • 天翼云高级运维工程师202407回忆题库 最新出炉
  • 在Python中什么是上下文管理器以及如何使用with语句来管理资源
  • (四)、python程序--贪吃蛇游戏
  • 什么是DNS欺骗
  • C++实现对结构体信息排序