- sql自学笔记(十六)——MySQL8.0版本的新特性(六)
- sql自学笔记(二十六)——MySQL8.0版本的新特性(十六)
- sql自学笔记(十一)——MySQL8.0版本的新特性(一)
- sql自学笔记(十二)——MySQL8.0版本的新特性(二)
- sql自学笔记(十七)——MySQL8.0版本的新特性(七)
- sql自学笔记(十九)——MySQL8.0版本的新特性(九)
- sql自学笔记(十三)——MySQL8.0版本的新特性(三)
- sql自学笔记(十四)——MySQL8.0版本的新特性(四)
- sql自学笔记(十五)——MySQL8.0版本的新特性(五)
- sql自学笔记(十八)——MySQL8.0版本的新特性(八)
函数索引
- MySQL8.0.13开始支持索引中使用函数(表达式)的值
- 支持降序索引,支持JSON数据的索引
- 函数索引基于虚拟列功能实现
创建一个测试表,两个字段
create table t3(c1 varchar(10),varchar(10));
作为比较创建一个普通的索引
create index idx on t3(C1);
再创一个函数索引
create index func_idx on t3(CUPPER(c2));
创建完成后显示索引信息
show index from t3\G;
执行计划器对这两个索引的使用情况
1.首先查看一下第一个索引,使用UPPER函数进行不区分大小写查询
explan select * from to where uper(cll = "ABC");
如图所示,该图中用的是where查询,效率低
如果基于c2字段查询,使用函数索引方式
expain select * from t2 where supper(c2) = "ABC";
如何针对某一个JSON节点对其进行索引
create table emp(data json,index((AST(data ->>'$.name' as char(30))))) ;
创建完成之后可以查看一下
show index from emp;
换一种形式更清楚一点
show index from emp\G
通过索引快速查询JSON数据
explain select * from emp where (AST(data ->> '$.name' as char(30))=''abc');
再回到T3表查看一下
select * from t3;
desc t3;
新建一个列模拟一下c2的函数索引
alter table t3 add column c3 varchar(10)genereated always as (supper(c1));
插入一条数据
insert intoty(c1,c2) values('abc',‘abc’);
查询一下
select * from t3;
模拟函数索引的效果
create index idx3 on t3(c3);
再来查询一下
explain select * from t3 where upper (c1) = 'ABC';













网友评论