• MySQL之索引


    索引

    1. 什么是索引

    ​ 可以理解为:搜索引导,索引是一个特殊的数据结构。其存储的是数据的关键信息与详细信息的位置对应关系。索引的本质就是不断的减少搜索的范围。

    ​ 例如:书本的目录

    2. 为什么需要索引

    ​ 加速查询,当数据量非常大的时候,查询某一个数据是非常慢的。

    3. 索引的影响:

    1. 不是说有了索引就能加速,得看你的查询语句有没有正确使用索引
    2. 索引也需要占用额外的数据空间,索引本身很大,可以存放在内存、硬盘(通常为硬盘)
    3. 添加索引后,对增加、删除、修改 会 变慢(写入)
    4. 索引不是所有情况均适用。a. 少量数据 b. 频繁更新的字段 c. 很少使用的字段
    5. 索引会降低增删改的效率()

    4. 什么样的数据应该添加索引:

    1. 查询操作较多写入较少并且数据量很大时

    索引的分类:

    1. 单值索引:单指单列 一个表中可存在多个,比如:alter table user add index 索引名称(索引的字段);
    2. 唯一索引:
    3. 复合索引:多个列构成的。(相当于二级目录,比如找名字姓找的人,先找z,然后在z中找zhao)

    5. 索引树的高度和叶子的关系

    ​ 叶子节点才是存储数据的,它存储的数据的空间是定长的。叶子的数量越多,树就越高。因此叶子节点尽可能存储更多的数据。换一句话说 应该将数据量小的字段作为索引

    6. 联合索引(最左匹配原则)

    ​ 遵循原则,从左往右进行比较。成为最左匹配原则

    7. 聚集索引

    聚集索引中包含了所有字段的值,如果拟制定了主键,主键就是聚集索引,如果没有则找一个非空且唯一的字段作为聚集索引,如果也找不着,自动生成一个字段作为聚集索引 
    聚集索引中的叶子节点存储了所有字段值
    

    8. 辅助索引

    除了聚集索引之外的都叫辅助索引(第二索引),辅助索引中只包含当前的索引字段和主键值
    	回表操作的触发条件
    

    9. 覆盖查询

    能通过索引一次性直接找到数据的,这个过程就称为覆盖查询
    

    10. 回表查询

    通过辅助索引一次性查询不到对应的数据,需要再通过聚集索引 再查询。这个成为回表查询
    

    11. 结论:

    1. 使用占用空间最小的字段来作为索引

    2. 在B+数中查询任意的数据次数:N次(B+树的高度)

    3. 不要在一行中存储太多的数据,例如小说/视频/,如果字段太多可以分表

    4. 尽量使用覆盖查询

    5. 速度:聚集索引 > 辅组索引 > 非索引

    6. 如果字段对应的值的区分低,建立索引是没有意义的。反过来说应该将区分度高的字段作为索引

    7. 模糊匹配中,百分号尽量不要写在前面

    8. 不要再等号的左边做运算

      例如:select count(*) from usr where id * 3 = 6; 也会遍历所有记录

    9. and语句中会自动找一个具备索引的字段优先执行,所以我们应该在and语句中至少包含一个具备索引的字段

    10. or语句要避免使用,如果要用则保证所有字段都有索引才能加速

    11. 联合索引中,顺序应该将区分度最高的放到左边,最低的放右边

      查询语句中必须保证最左边的索引出现在语句中

    注意:

    1. 如果要查询的数据量非常大 索引无法加速
    2. 不是添加了索引就能提速,需要考虑索引添加的是否合理,sql语句是否使用到了索引

    创建索引的语法

    create index 索引的名字 on 表名称(字段名称);

    alter table 表名 add index 索引名字 字段名称;

  • 相关阅读:
    退出窗口时出现“当”的响声
    屏幕设备环境
    修改一个完全颜色的CListCtrl类
    修改一个完全颜色的CListCtrl类
    MFC中CString.Format的详细用法
    网上阅卷系统自动识别功能代码
    mfc 子对话框数据传给父对话框
    already defined in *.obj
    Object 的使用
    this 函数执行上下文
  • 原文地址:https://www.cnblogs.com/plf-Jack/p/11213029.html
Copyright © 2020-2023  润新知