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

    1. 索引:
    什么是索引?
    在关系数据库,索引是一种单独的,物理的对数据库表中一列或多列的值进行排序的一种存储
    结构;也称之为key
    索引的作用:
    索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需要的内容。
    为什么需要索引?
    因为项目运行中,查询操作非常频繁,为了提高用户体验,要提高查询速度,如何提高就靠索
    引提高查询效率的有效手段。

    索引的实现:
    数据库中的索引,实现思路与字典是一致的;需要一个独立的存储结构,专门存储索引数据;
    本质上索引通过不断缩小查询范围来提高查询效率。

    索引带来的影响:
    1.加速查询
    2.降低写入(增删改)速度
    3.会额外占用磁盘空间

    索引的分类;
    1.聚集索引 (主键索引)。
    行中的完整记录存在聚集索引的叶子节点
    2.辅助索引 除了主键外的索引
    叶子节点 存储索引字段的值 还有 主键的值
    使用辅助索引时 会产生两种现象
    1. 回表 要查的数据就不在辅助索引中 需要到聚集索引中查找
    2.覆盖索引 要查的数据就在辅助索引中

    mysql中的索引:
    1.主键索引
    2.外键索引
    3.index索引

    B+树:
    在树枝中存储的不是数据,是索引。取数据经历3次io操作就可以了。
    光有数据结构还不可以,还需要对应算个发做支持,就是二分法。
    遵循最左匹配特性
    注意:尽可能将数据量小的数据来作为索引

    聚集索引*:
    聚焦索引的特点:
    叶子节点保存的就是完整的一行记录,如果设置了主键,主键就作为聚集索引,
    如果没有主键,则找第一个NOT NULL 且QUNIQUE的列作为聚集索引,
    如果也没有这样的列,innoDB会在表内自动产生一个聚集索引,它是自增的

    辅助索引*:
    除了聚集索引之外的索引都称之为辅助索引或第二索引,包括 foreign key 与 unique

    辅助索引的特点:
    其叶子节点保存的是索引数据与所在行的主键值,InnoDB用这个 主键值来从聚集索引中搜
    查找数据。

    覆盖索引:
    覆盖索引指的是需要的数据仅在辅助索引中就能找到。这样的话则不需要在查找聚集索引
    数据已经找到。

    回表:
    如果要查找的数据在辅助索引中不存在,则需要回到聚集索引中查找,这种现象称之为回表。
    需要从辅助索引中获取主键的值,在拿着主键值到聚集索引中找到sex的值。

    查询速度对比:
    聚集索引 > 覆盖索引 > 非覆盖索引

    命中索引(正确使用索引):
    条件中有索引字段匹配上。
    1. 无论索引如何让设计 无法降低范围查询的查询速度
    select *from usr where id>1;
    即使命中也无法提高效率

    2. 索引不应该加在值重复度很高的字段上 应该加在重复度低的字段上


    3. 当条件中出现多个索引命中时 会自动找一个区分度高的索引来使用and的时候,
    如果有索引存在;挑一个重复度低的索引执行。不遵循从左往右顺序。

    4. 使用or的时候 如果两边都有索引 才会使用索引,但需要注意的是 or两边都会执行。
    如果or两边只有一边有索引则不会达到使用索引的效果,无法加速查询。
    顺序是从左往右。

    5.优化查询 不仅仅要加索引 sql语句也需要优化 十七命中索引
    你的条件中应该使用区别度高的索引

    6.联合索引
    为什么使用联合索引
    降低资源的占用,降低增删改的时间 会比单个字段的索引快
    建立联合索引时 应该把区分度高的放在最左边 区分度低的依次往右放;按照区分度
    的高低 从左往右 依次排序
    查询中应该优先使用左边的索引
    使用and时 无所谓书写顺序 会自动找区分度最高的

    注意使用联合索引时 如果压根没用到最左侧索引 不能加速查询


    总结:
    正常开发时;
    优先使用聚集索引
    再次使用联合索引 如果你的条件不包含最左侧索引 不能加速查询 这时候就应该
    使用单个字段索引



    补充:
    count(n)计数的

    创建索引 create index 索引名称 on 表明(索引字段)

    alter table user add primarry key(id);加主键索引

    alter table user drop primarry key;删主键索引

    重点掌握:
    1.什么是索引,为什么使用索引。
  • 相关阅读:
    jQuery找出所有没有disabled属性的checkbox
    jQuery prop()方法
    Aliyun 中PHP如何升级
    The connection to the server localhost:8080 was refused
    ks8集群扩容新增节点,以及xshell无法访问的问题
    设置小程序模板消息keyword_id_list问题
    git如何新建仓库,并初始化代码
    k8s应用配置详解
    git如何把分支变成master
    nginx首页根据IP跳转
  • 原文地址:https://www.cnblogs.com/yanhui1995/p/10027592.html
Copyright © 2011-2022 走看看