美文网首页
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