• 3、MySQL索引


    1、MySQL索引

    1.1、为什么要有索引?

    为了提高查询效率

    1.2、什么是索引?

    索引在MySQL中也叫做一种“键”,是存储引擎用于快速找到记录的一种数据结构,索引对于良好的查询性能非常关键,尤其是当数据量大的时候

    1.3、索引的原理

    本质是:通过不断的缩小想要获取的数据的范围来筛选出最终想要的结果,同事把随机的事件变成顺序的事情,也就是说,有了这种索引机制,我们可以总是用同一种查找方式来锁定数据;

    MySQL索引使用的的数据结构有BTrees索引和哈希索引;
    对于哈希索引而言,底层的数据结构是哈希表,因此在绝大多数需求为单条记录查询的时候可以选择哈希索引,查询效果最快;其他大部分场景使用BTree索引;
    BTrees索引使用的是B树中的B+Tree,对于两种不同的引擎实现方式不同:

    • MyISAM:B+Tree的叶节点的data域存放的是数据记录的地址;在索引检索的时候,首先按照B+Tree搜索算法搜索索引,如果指定key存在,则取出其data域的值作为地址读取相应的数据记录。这叫“非聚簇索引”
    • InnoDB:其数据文件本身就是索引文件。相比MyISAM,其表数据文件本身就是按B+Tree组织的一个索引结构,树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。这被称为“聚簇索引(或聚集索引)”。而其余的索引都作为辅助索引,辅助索引的data域存储相应记录主键的值而不是地址,这也是和MyISAM不同的地方。在根据主索引搜索时,直接找到key所在的节点即可取出数据;在根据辅助索引查找时,则需要先取出主键的值,再走一遍主索引。 因此,在设计表的时候,不建议使用过长的字段作为主键,也不建议使用非单调的字段作为主键,这样会造成主索引频繁分裂。

    2、创建索引遵循的规则

    1. 唯一性索引:唯一性索引的值具有唯一性,可以更快的通过该索引确定某条记录
    2. 为经常需要排序、分组、和联合操作的字段建立索引:经常需要ORDER BY、GROUP BY、DISTINCT和UNION等操作的字段,排序操作会浪费很多时间。如果为其建立索引,可以有效地避免排序操作
    3. 为常用的查询条件创建索引:如果某个字段经常用来做查询条件,那么该字段的查询速度会影响整个表的查询速度。因此,为这样的字段建立索引,可以提高整个表的查询速度
    4. 限制索引的数目:每个索引都需要占用磁盘空间,索引越多,需要的磁盘空间就越大。修改表时,对索引的重构和更新很麻烦。越多的索引,会使更新表变得很浪费时间
    5. 尽量使用数据量少的索引:如果索引的值很长,那么查询的速度会受到影响
    6. 尽量使用前缀来索引:如果索引字段的值很长,最好使用值的前缀来索引。例如,TEXT和BLOG类型的字段,进行全文检索会很浪费时间。如果只检索字段的前面的若干个字符,这样可以提高检索速度
    7. 删除不再使用或者使用很少的索引:表中的数据被大量更新,或者数据的使用方式被改变后,原有的一些索引可能不再需要。 数据库 管理员应当定期找出这些索引,将它们删除,从而减少索引对更新操作的影响

    3、索引会在什么情况下失效

    1. 理想状态是:全值匹配
    2. 违反索引的最左原则:缺少左边的索引字段
    3. 在索引列上做任何操作:函数、计算、转换类型等
    4. 索引范围条件右边的列:大于,小于
    5. 尽量使用覆盖索引:只访问索引查询,减少select *
    6. 使用不等于:!=,<>,属于覆盖索引外
    7. like以通配符开头:like “%123”
    8. 字符串不加单引号
    9. or链接
    10. order by:违反最左前缀法则、含非索引字段排序,会导致文件排序
    11. group by:违反最左前缀法则、含非索引字段排序,会导致产生临时表
  • 相关阅读:
    Windows与网络基础-25-二进制基础
    基于Kubernetes + Istio实现灰度发布
    VS Code 2022路线图:大量Spring Boot优化提上日程
    nodejs+vue+elementui个人图书分享共享网站
    【数据结构】哈希表
    基于ARM架构openEuler系统通过qemu模拟器自动安装启动ARM架构的openEuler虚拟机
    JS基础笔记-关于对象
    七周成为数据分析师 | 业务
    马蹄集OJ赛第十三次
    MySQL 数据库约束
  • 原文地址:https://blog.csdn.net/weixin_44435110/article/details/126085702