zoukankan      html  css  js  c++  java
  • mysql 索引

    #

    索引
        加速查询速度
        mysql的存储引擎的索引基于 b+树hash做的
            innodb b+树 聚集索引/聚簇索引 非聚簇索引
            myisam b+树 非聚簇索引
            memory hash
        b+树做了那些事儿?为什么基于b+树的索引会快?
            一颗平衡树
            在非叶子节点不存储数据相关的信息,只存放指针  :  让树的高度降低了,所有的数据的寻找的时间是固定的
            在叶子节点会直接存储数据或者数据的指针       :  能够直接找到对应的数据
            叶子节点的各个数据块之间使用双向链表来连接   :  能够更好的进行范围排序相关的操作
        要想缩短树的高度,我们能做的事情
            1.就是让每一列的宽度尽量的小
        聚簇索引和非聚簇索引
            聚簇索引
                一张表只能有一个
                 只在innodb存储引擎中存在
                b+树 : 在叶子节点会直接存储数据
                所有的数据存储的物理地址是根据索引顺序   : 排序快
            非聚簇索引
                每张表可以有多个
                在myisam,innodb中都存在
                b+树 : 在叶子节点会存储数据的指针
                所有的数据存储的物理地址和索引顺序无关
                如果创建多个非聚簇索引,那么insert delete数据都会非常慢,并且占用更多的硬盘和内存
    在创建表的时候创建索引
    CREATE TABLE ind1 (
                    id int primary key,
                    name char(12),
                    index ind_name(name)
                    );
    
    在建表之后添加索引
    CREATE TABLE ind2 (
                    id int primary key,
                    email char(12)
                    );
    CREATE INDEX ind_email on ind2(email);
    alter table ind2 add index ind_email(email);
    
    删除索引
    DROP INDEX ind_email ON ind2;
    覆盖索引(好事儿)
    是你能够从辅助索引中直接拿到想要的数据,而不需要再经过IO从聚集索引中取值了
    
    可以在配置中开启慢日志,把所有的sql语句执行的超过了你预期时间的都记录下来,方便我们查看具体慢的sql语句,来进行修改和优化
    
    聚集索引  直接把数据存储在建立好了的索引中
    非聚集索引(辅助索引) name,sex 只有索引字段存储在索引中,该字段所在行的其他数据存储在另外的地址,在辅助索引的叶子节点上有一个指针指向这行数据所在的地址
    select name where name like 'eva';
    select name,sex where name like 'eva';
    
    age创建一个索引
    select age where age > 60;   # 覆盖索引
    select age,name where age > 60;   # 不是覆盖索引
    
    age,name创建一个联合索引
    select age,name where age > 60;   # 覆盖索引
    explain和覆盖索引 甚至和索引都没有任何关系
    它只是在真正使用某一条sql语句之前先来看一看这条语句计划中是怎么执行的
  • 相关阅读:
    vue element-ui,上传文件加载进度条显示效果(使用定时器实现源码分享)
    vue element-ui 上传文件的 :on-progress钩子无法触发的原因及报错原因
    vue打包文件后首次加载速度慢解决方法----1.压缩文件js.css 2.使用cdn加载
    vue 报错 RangeError: Maximum call stack size exceeded
    vue在IE11报错‘vuex requires a Promise polyfill in this browser.’
    轻松理解MYSQL MVCC 实现机制
    推荐:mysql锁 innodb下的记录锁,间隙锁,next-key锁
    MySQL的四种事务隔离级别
    php中文件上传大小限制如何修改
    Https原理及流程
  • 原文地址:https://www.cnblogs.com/zhangchen-sx/p/11273072.html
Copyright © 2011-2022 走看看