函数索引
- 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';
网友评论