zoukankan      html  css  js  c++  java
  • 数据库之索引

    什么是索引:
    索引就相当于书的目录,是mysql中一种专门的数据结构,称为key,
    索引的本质原理就是通过不断的缩小查询范围,来降低io次数从而提升查询性能
    强调:一旦为表创建了索引,以后的查询都会先查索引,再根据索引定位的结果去找数据

    三种:primary key 约束,加速
    unique 约束,加速
    index key 仅加速

    为什么要用索引:
    对于一个应用来说,对数据的读写比例基本是10:1,即读多写少,而且对于写来
    说极少出现性能问题,大多数性能问题都是慢查询,提到加速查,就必须用到索引

    索引的影响:
    1.在表中有大量数据的前提下,创建索引速度会很慢
    2.在索引创建完毕后,对表的查询性能会大幅度提升,但是写性能会降低

    索引的查找原理:
    B+树
    浅蓝色 磁盘块
    深蓝色 数据项,包含具体数据
    黄色 指针,每个磁盘块三个指针
    最下面一层,叶子节点,硬盘存的数据
    1036857-20170912011123500-158121126
    IO次数跟树的层级有关

    如何保证层级:
    首先磁盘块容量是固定的,数据所占容量越少,能存放的数据项越多
    层级越低,故我们需要对表中占硬盘容量越小的字段作为索引

    聚集索引:
    myisam 存储引擎在硬盘存的文件数量3个,其中MYI为索引文件
    innodb存储引擎在硬盘存的文件数量为2个,frm表结构,ibd为表数据,索引放在ibd中
    innodb默认主键为索引,按照索引树形结构保存数据
    按照id查可以加速,按照name不可以
    特点:叶子节点存放的是一整条数据,只有主键字段才能成为聚集索引,以主键查找速度快

    辅助索引(unique,index)
    特点:如果按照name字段创建索引,那么叶子节点存放的是{name:name所在那条记录的主键的值}
    覆盖索引:在辅助索引的叶子节点就已经找到了我们想要的数据
    如我们将name设置为辅助索引,要找的就是name,那name就是覆盖索引
    如果未找到我们想要的数据,我们在辅助索引的叶子节点中找到了记录的id,会通过id再次查找我们想要的数据,叫做回表

    联合索引
    索引的最左匹配,先从左面开始匹配
    create idex idx_all on s1(email,name,gender,id);
    只要查询中含有email的都可以命中,加速查询
    将区分度高的往左放,范围查询往最后放

    索引的添加:
    在没有数据时添加索引是很快的,在数据已经保存好时,添加索引很慢
    因为它要扫描所有数据添加索引
    索引并不是越多越好:
    写入时,会重新创建索引,硬盘疯转,磁盘IO高

    正确使用索引:

    1. 索引未命中:
      范围问题,< ,> !=
    2. 区别度低,相似度高 ,建成了棍型
    3. 模糊查询时
    4. 索引字段一定不要参与运算

    创建索引的方式
    方式一
    create table t1(
    id int,
    name char,
    unique key uni_id(id),
    index ix_name(name) #index没有key
    );
    方式二
    create index ix_age on t1(age);
    方式三
    alter table t1 add index ix_sex(sex);

    查看索引
    show create table t1;
    删除索引:
    drop index 索引名 on 表名 ;

  • 相关阅读:
    INFORMIX体系效能改善第一步
    Ubuntu判袂率不正常的一种复杂治理措施
    ubuntu8.04分区分配方案
    计算机启动更快的十五招
    理顺 JavaScript (13) 对象及 json
    获取指定地址的 JPG 图片 回复 "bangrj" 的问题
    理顺 JavaScript (14) constructor 与 instanceof
    理顺 JavaScript (9) Date 类
    用 API 提取、写入指定网站的 Cookie 回复 "bangrj" 的问题
    理顺 JavaScript (10) Math 类
  • 原文地址:https://www.cnblogs.com/robert-zhou/p/10263328.html
Copyright © 2011-2022 走看看