美文网首页
sql自学笔记(十六)——MySQL8.0版本的新特性(六)

sql自学笔记(十六)——MySQL8.0版本的新特性(六)

作者: itczt | 来源:发表于2019-05-04 13:54 被阅读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';

相关文章

网友评论

      本文标题:sql自学笔记(十六)——MySQL8.0版本的新特性(六)

      本文链接:https://www.haomeiwen.com/subject/tfhxoqtx.html