zoukankan      html  css  js  c++  java
  • MySQL-部分名词解释

    mysql索引实现的底层数据结构是?

    就大部分的存储引擎,比如Innodb,MyISAM,都是利用B+树,官方文档里写的是B树,但是实际上使用是B+树,它是B树的一种延伸.还有一种memory存储引擎他使用的数据结构是哈希表。
    

    索引的优点?

    1.减少了扫描的数据类
    2.将随机IO变成了顺序IO
    3.加快我们查询速度
    

    索引分类有什么?

    一共有五种:
    主键索引:主键索引必须非空且唯一
    唯一索引
    普通索引
    全文索引
    组合索引
    

    B+树与B树区别

    B+树只在叶子节点存储数据,B树在叶子节点还是非叶子节点都会存储数据
    

    回表

    在使用普通字段作为索引的时候,就比如说name这个字段我们平时使用的几率很高,为了提高查询效率我们给他建立了一个普通索引,因为B+树他
    是在叶子节点存数据的,我们正常的id主键索引,他在树的叶子节点里存的是一行一行的数据,而想name这种普通索引的B+树里存的不是行数据,
    而是这个索引对应的id值,然后mysql再按照这个id值利用主键索引去他的B+树里把数据查出来,这个过程就是回表。
    

    索引覆盖或者叫覆盖索引

    就是说一个索引他的B+树叶子节点包含了需要查询的值,不需要再进行回表查询,这就叫索引覆盖。比如上面的例子,我们现在有两条sql语句
    select * from user where name='张三';
    select id from user where name='张三';
    因为我们的name是普通索引,叶子节点上只存放了主键的id值,所以,语句一是没有覆盖索引,需要回表,语句二覆盖索引,不需要回表
    

    最左匹配

    联合索引页是一种索引,也是需要构建B+树的,我们之间的比如主键索引,他的B+树的key是一个值,而现在key变成了一个元组,比如
    (name,age)这种形式。
    当我们利用联系索引进行查询的时候,查询的条件需要按照我们建立索引的字段顺序来查询,即匹配最左侧的字段,比如现在的联合索引是(name,age),那么我们使用
    以下的方式是能命中索引的。
    select * from user where name='张三';
    select * from user where name='张三' and age=18;
    select * from user where age=18 and name='张三';
    # 这种情况虽然和我们建立索引的顺序不一样,但是mysql内部有优化器,会自动帮我们调整顺序,所以查询的时候和第二条是一样的
    这种方式无法命中索引
    select * from user where age=18;
    为何无法命中请看另一篇博客,《索引失效的原理》
    

    索引下推,谓词下推

    索引下推的意思就是在我们利用索引查询的时候,mysql会根据我们的条件,在查询到的叶子节点中先对数据进行筛选,减少回表次数。是在5.6之后才有的,没有组合索引的话就没有下推才概念了,因为每次只取一个值
    

    倒排索引

    正常的来说我们的索引是正排索引,倒排索引是用来优化我们的查询效率的,尤其是在大数据,数据分析方面,想我们es就使用到了倒排索引。
    

    正排索引

    比如我们一行数据中,

    文档1:hello,tom。How are you

    文档2:hello,jack。what about you

    那么正排索引就是如下图一样,

    文档1对应的value被拆开成:hello tom How are you

    文档2对应的value被拆开成:hello jack what about you

    image-20201206160739260

    倒排索引

    倒排索引就是反了过来,把单词作为key,此时的数据就是

    hello:文档1,文档2

    tom :文档1

    jack:文档2

    。。。

    image-20201206161253839

    此时我们使用倒排索引,当要检索关键字的时候,比如我们要查包含了tom的文档,那么直接就返回了tom对应的文档1。如果是正排索引就需要对文档1和文档2全文查找,效率立见。

  • 相关阅读:
    ant构建Jmeter脚本的build文件配置(build.xml)
    Jmeter加密函数__digest总结
    Python接口自动化测试脚本-实现禅道登录
    转载:windows下安装mac虚拟机(Vmvare+mac)
    jstat监控JVM内存使用、GC回收情况
    Pycharm添加Python文件模板
    总结:Jmeter常用参数化方式
    Mysql添加索引及索引的优缺点
    Mysql常用语法
    性能测试中TPS上不去的原因
  • 原文地址:https://www.cnblogs.com/chiyun/p/14066403.html
Copyright © 2011-2022 走看看