• Mysql索引


    一. 索引的优缺点

    二. 索引的结构 

     如果索引结构采取的是二叉树或者红黑树的时候出现的问题。

    而红黑树的问题B树就能很好的解决

    B树索引、B+树索引

    这里B树、B+树

    数据结构-B树、B+树_羡云不羡君的博客-CSDN博客

    hash索引

    Hash算法 平衡二叉树(调整平衡)_羡云不羡君的博客-CSDN博客

    三.索引分类

    二级索引也叫非聚集索引:叶子节点下面挂的是主键。(非聚集索引都是非主键字段)

    聚集索引:叶子节点下面挂的是这一行的数据。(见上面的聚集索引选取规则)

    一条sql的执行过程:

    这里的条件是根据name去查询。所以就要根据name这个字段的二级索引来查询。就能查询到Arm的id为10。然后再根据id=10  聚集索引去查询这一行的数据。

    四.索引语法

    参考:

    mysql中主键、普通索引、唯一索引和全文索引_han_cui的博客-CSDN博客_mysql 唯一索引 排序

    4.1 创建索引

    [UNIQUE | FULLTEXT] 没有写的话这里默认是普通索引(常规索引) 

    (index_col_name,...):字段名:可以是一个字段,也可以是多个字段。如果关联一个字段表示单列索引,关联多个字段叫联合索引(组合索引)

    4.2 查看索引

    4.3 删除索引 

    五.索引的使用原则 

    5.1 最左前缀法则(主要针对于联合索引)

    如果索引了多列(联合索引),要遵守最左前缀法则。最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列。如果跳过某一列,索引将部分失效(后面的字段索引失效)

    假设这里创建了一个联合索引并按照如下顺序(profession、age、status)

    这条sql语句就会使用这个联合索引,因为这条sql是最左边的字段有,并且没有跳过任何一个字段

     这条sql语句就会使用这个联合索引,因为这条sql是最左边的字段有,并且没有跳过任何一个字段

     

     这条sql语句就会使用这个联合索引,因为这条sql是最左边的字段有,并且没有跳过任何一个字段

     这条sql会完全失效。因为没有最左边的字段了

     这条sql会部分失效(只有profession生效),status失效了,因为中间跳过了一个age字段。

    这条sql索引会生效,因为最左边的字段存在,中间也没有跳过任何一个字段,这个与sql中的字段顺序没有关系。 

    5.2 范围查询(对于联合查询失效的情况)

    联合查询中,出现范围查询(>,<) ,范围查询右侧的列索引失效。

     索引部分失效:这条sql中只有profession字段索引生效。

     索引完全生效

    结论:所有我们在进行范围查询的时候尽量使用>=或<=

    5.3 索引失效的情况

    * 索引列运算

      不要在索引列上进行运算操作,索引将失效。

    phone字段有个单列索引。 对phone字段使用了字符串截取函数。

    * 字符串不加引号

    字符串类型字段使用时,不加引号,索引将失效。(这与mysql中的隐式转换有关)

    MySQL 字符串类型用数字可以查出来 MySQL字符串类型会转换成数字 MySQL隐式类型转换_HaHa_Sir的博客-CSDN博客

     status这个字符串类型字段,没有使用引号,导致联合索引部分失效(status失效)

     phone这个字符串类型字段,单列索引失效。

    * 模糊查询

    如果仅仅是尾部的模糊匹配,索引不会失效。如果头部进行模糊匹配,索引失效。

    只有第一条sql索引不会失效

    * or连接的条件

    * 数据分布影响

    如果Mysql评估使用索引比全表更慢,则不使用索引。

    5.4 SQL提示

    use index 与 force index的区别:use index 只是建议Mysql使用这个索引,而force index是强制使用这个索引。 

    6.覆盖索引

    尽量使用覆盖索引(查询使用了索引,并且需要返回的列,在该索引中已经全部能够使用),减少select *。

    例:假设已经为name字段创建了索引

     这里需要返回的列就是id,name。id在name这个二级索引中的叶子节点已经能够找到了,所以这里不会回表查询。这就是覆盖索引。

    这里多了一个gender字段,而gender字段在name这个二级索引中不能找到需要回表查询。 

     7.前缀索引

    当字段类型为字符串时(varchar,text等),有时候需要索引很长的字符串,这会让索引变得很大,查询时,浪费大量的磁盘io,影响查询效率。此时可以将字符串的一部分前缀,建立索引,这样可以大大节约索引空间,从而提高索引效率。

    7.1 语法

    这里的n表示要提取这个字符串前面的几个字符来构建索引。 

    7.2 前缀长度选择

    8.单例索引和联合索引

     

     9.索引的设计原则

  • 相关阅读:
    雪糕冰淇淋经营配送小程序商城效果如何
    模块 Python3
    【13. 二进制中1的个数、位运算】
    【VisualStudio使用】快捷键
    TeeChart Pro for .NET 2022.10.24 Crack
    Flink-提交job
    非关系型数据库Redis(缓存型数据库)
    【嵌入式学习】--Uart串口
    Navisworks二次开发——图元属性获取
    转转“拯救世界”的第一步,师从小米换LOGO?
  • 原文地址:https://blog.csdn.net/weixin_54401017/article/details/126560186