首页 > 数据库 >mysql8 json 索引总结

mysql8 json 索引总结

时间:2023-05-14 15:24:06浏览次数:44  
标签:mysql8 age object 索引 json test hobby array

表结构如下所示:

CREATE TABLE `test_json` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `name` varchar(32) NOT NULL,
  `age` int NOT NULL,
  `test_json_array` json NOT NULL,
  `test_json_object` json NOT NULL,
  `test_json_array_object` json NOT NULL,
  `custinfo` json DEFAULT NULL COMMENT 'json数据',
  PRIMARY KEY (`id`),
  KEY `json_more_value_index` ((cast(json_extract(`custinfo`,_utf8mb4'$.zipcode') as unsigned array)),`name`,`age`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

数据如下所示:

表数据SQL如下所示:

INSERT INTO `test_json` (`id`, `name`, `age`, `test_json_array`, `test_json_object`, `test_json_array_object`, `custinfo`) VALUES (1, '张三', 18, '[1, 2, 3]', '{\"height\": \"175cm\", \"weight\": \"50kg\"}', '[{\"group\": 1, \"hobby\": \"打篮球\"}, {\"group\": 2, \"hobby\": \"睡觉\"}]', '{\"zipcode\": [94582, 94536]}');
INSERT INTO `test_json` (`id`, `name`, `age`, `test_json_array`, `test_json_object`, `test_json_array_object`, `custinfo`) VALUES (2, '赵四', 22, '[1, 4, 6]', '{\"height\": \"170cm\", \"weight\": \"57kg\"}', '[{\"group\": 3, \"hobby\": \"打游戏\"}, {\"group\": 4, \"hobby\": \"睡觉\"}]', '{\"zipcode\": [94568, 94507, 94582]}');
INSERT INTO `test_json` (`id`, `name`, `age`, `test_json_array`, `test_json_object`, `test_json_array_object`, `custinfo`) VALUES (3, '王五', 36, '[4, 9, 7]', '{\"height\": \"120cm\", \"weight\": \"60kg\"}', '[{\"group\": 9, \"hobby\": \"看博客\"}, {\"group\": 6, \"hobby\": \"睡觉\"}]', '{\"zipcode\": [94477, 94507]}');
INSERT INTO `test_json` (`id`, `name`, `age`, `test_json_array`, `test_json_object`, `test_json_array_object`, `custinfo`) VALUES (4, '李丹', 78, '[3, 5, 7]', '{\"height\": \"130cm\", \"weight\": \"60kg\"}', '[{\"group\": 9, \"hobby\": \"看博客\"}, {\"group\": 6, \"hobby\": \"睡觉\"}]', '{\"zipcode\": [94536]}');
INSERT INTO `test_json` (`id`, `name`, `age`, `test_json_array`, `test_json_object`, `test_json_array_object`, `custinfo`) VALUES (5, '六六', 13, '[4, 5, 8]', '{\"height\": \"180cm\", \"weight\": \"60kg\"}', '[{\"group\": 9, \"hobby\": \"看博客\"}, {\"group\": 6, \"hobby\": \"睡觉\"}]', '{\"zipcode\": [94507, 94582]}');

创建索引如下所示:也就是多值索引如下所示:

ALTER TABLE test_json ADD INDEX test_json$test_json_array ( age, (CAST( test_json_array -> '$[*]' AS UNSIGNED ARRAY )), name );
ALTER TABLE test_json ADD INDEX test_json$test_json_array_object ((CAST( test_json_array_object -> '$[*].hobby' AS CHAR(64) ARRAY )), age);
ALTER TABLE test_json ADD INDEX `json_more_value_index` ((CAST(custinfo->'$.zipcode' AS UNSIGNED ARRAY)),name, age );

test_json_array数组SQL查询语句如下所示:

select * from test_json t where age = 18 and JSON_OVERLAPS (test_json_array -> '$[*]',CAST( '[1,2]' AS JSON ));

test_json_array数组查询执行计划SQL语句如下所示:

explain select * from test_json t where age = 18 and JSON_OVERLAPS (test_json_array -> '$[*]',CAST( '[1,2]' AS JSON ));

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

总结:

 

标签:mysql8,age,object,索引,json,test,hobby,array
From: https://www.cnblogs.com/jelly12345/p/17399361.html

相关文章

  • MySQL8之JSON_OVERLAPS、JSON_CONTAINS
    表结构如下所示:CREATETABLE`test_json`(`id`bigintNOTNULLAUTO_INCREMENT,`name`varchar(32)NOTNULL,`age`intNOTNULL,`test_json_array`jsonNOTNULL,`test_json_object`jsonNOTNULL,`test_json_array_object`jsonNOTNULL,`custinfo......
  • MySQL8版本之json_keys、json_object、json_overlaps、json_pretty
    CREATETABLE`test_json`(`id`bigintNOTNULLAUTO_INCREMENT,`name`varchar(32)NOTNULL,`age`intNOTNULL,`test_json_array`jsonNOTNULL,`test_json_object`jsonNOTNULL,`test_json_array_object`jsonNOTNULL,`custinfo`jsonDEFAU......
  • 获取compile_commands.json的方式
    CMake工程这个最简单,在CMakeLists.txt中加set(CMAKE_EXPORT_COMPILE_COMMANDSon),或者在cmake的命令中加-DCMAKE_EXPORT_COMPILE_COMMANDS.即可产生CMakefileMakefile借助compiledb程序可以生成compile_commands.json文件。compiledb-nmake-f/path/to/Makefile#......
  • 常用模块,time,random,json,os
    模块底层都是c语言写的模块的分类内置模块,不需要自己安装,直接拿过来用扩展模块,第三方模块,需要自己安装本地编辑器安装小白教程(forchange.cn)random随机数.random()不入参,求(0,1)之间的随机数,开区间.randint(a,b)求随机整数,闭区间[a,b].randrange(start,stop,step......
  • 索引初识
    索引(基础)一、索引介绍1.1、前言在数据库中,执行如下语句时:select*fromempwhereid=1000;mysql是从第一条记录开始遍历,直至找到id=1000的数据,然而这样查询的效率低,所以mysql允许通过建立索引来加快数据表的查询和排序。1.2、索引概念数据库的索引类似字典中的拼......
  • 新版《谷歌搜索引擎优化初学者指南》
    站长朋友们,我们非常高兴地宣布,新版《谷歌搜索引擎优化初学者指南》已经发布了,欢迎您下载阅读! 简体中文版:http://www.google.com/intl/zh-CN/webmasters/docs/search-engine-optimization-starter-guide-zh-cn.pdf 繁体中文版:......
  • com-alibaba-fastjson转换json时默认将属性第一个字母转小写
    问题描述将实体类对象转为json字符串的时候,会将属性名首字母改为小写例如此出User队形有两个属性,USER_NAME和USER_AGE,首字母均为大写将实体类对象转为JSON后首字母全都转换为了小写解决方法这是因为阿里巴巴的fastjson框架默认使用了JavaBean规范中的命名约定,将属性名首字......
  • macos13 m1 安装 mysql8.0.32
    1、下载安装包选择MySQLCommunityServer版本MySQL::DownloadMySQLCommunityServer(ArchivedVersions)2、可视化安装选择强密码策略3、环境变量配置cat.zshrcexportPATH=$PATH:/usr/local/mysql-8.0.32-macos13-arm64/binexportPATH=$PATH:/usr/local/mysq......
  • 前端 Website 的 sitemap.xml 文件和搜索引擎优化
    前端Website的sitemap.xml文件是一个XML格式的文件,其中包含了网站中所有页面的链接,这些页面可以是HTML页面、博客文章、产品页面、分类页面等等。Sitemap文件的作用是向搜索引擎提供关于网站的信息,帮助搜索引擎更好地索引网站内容,提高网站在搜索结果中的排名。Sitemap.xml......
  • 文件相关信息、文件索引信息、链接信息、系统时间、机器克隆、定时任务、paramiko模块
    目录今日内容概要今日内容详细文件相关信息文件索引信息链接信息系统时间机器克隆定时任务paramiko模块公钥私钥paramiko其他操作代码封装面试题回忆etc目录配置相关/etc/profile 环境变量文件/etc/motd 开机欢迎界面usr目录程序相关四种安装软件的方式 1.yum安装 ......