• 小步前进之细谈数据库索引


    索引

    什么是索引?

    当我们在遇到不懂的汉字的时候该怎么办?查字典。根据拼音查,根据部首查,这就是索引应用的实例。
    百科定义

    索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中特定的信息。

    数据库索引的主要目的就是加快检索表中的数据,好比一本书的目录一样,

    能帮助你快速定位。

    如果新华字典没有索引,那可能最后一页的字你需要从第一页翻到最后一页,

    这是多么令人绝望的事情。

    索引根据存储结构又可划分为聚集索引非聚集索引两种。

    聚集索引

    聚集索引基于数据行的键值在表内排序和存储这些数据行。 每个表只能有一个聚集索引,因为数据行本身只能按一个顺序存储。–百科

    以上就是官方的话,事实上,聚集索引就是我们所熟知的字典的拼音查询,

    我们将汉字的拼音开头按照A-Z排序,随后我们查找“安”字我们

    就可以找到A下面的安在第几页,从而提高查找效率,索引也是如此。

    数据总是要有排序规则的,这个规则需要以什么为标准就是我们熟知的索引。

    心得:当我们创建id时,数据会按照id排序,这就是聚集索引,

    我们可以根据指定的id来查询特定的值,这是效率最高的。

    例如:根据你的员工编号或者学生编号来查询你的信息,会大大提高查询效率。

    每个表只能有一种聚集索引,因为只能按照一种索引进行排序。

    PS:主键是一种特殊的索引,如果创建表的时候表中一个聚集索引都木有,

    同时创建时没有强制指定使用非聚集索引,则主键会自动创建为聚集索引,否则为非聚集索引。

    非聚集索引

    下面的表总结了何时使用聚集索引或非聚集索引(重要):

    动作描述使用聚集索引使用非聚集索引
    列经常被分组排序
    返回某范围内的数据不应
    一个或极少不同值不应不应
    小数目的不同值不应
    大数目的不同值不应
    频繁更新的列不应
    外键列
    主键列
    频繁修改索引列不应

    参考
    https://www.cnblogs.com/become/p/9173538.html

    从栗子话索引

    关系型数据库大都采用B-tree结构的索引。
    在这里插入图片描述
    上图为最简单的索引,即只有一个字段ID,范围0~250。

    从图中可以看到,最上层为根索引,将最底层的索引0~10提取为一行,最上层将第二层0-40提取为一行。

    如果要查ID=223,我们先要从根节点查,然后查第二层,最后查最后一层,则只用3次即可查到对应结果。

    需要注意的是,只有非聚集索引才需要用指针去数据表查询对应的行数据。对于聚集索引来说,叶节点就是表本身,因此省了这一步。

    SQL Server仅提供B-tree结构的索引。其它关系型数据库也都使用B-tree,但某些产品提供一些增强。例如Oracle还提供Bitmap-index,mySQL提供Hash index。

    参考索引与执行计划

    作者信息
    2年crud码农一枚,文章主作笔记之用,如有错误请指正,如果侵权请告知,立删。如果本文对你有所帮助,请点赞,谢谢。

  • 相关阅读:
    使用redis配置分布式session
    邮件发送整合
    Spark基础-scala学习(八、隐式转换与隐式参数)
    QMQ去哪儿网-mq中间件(启动失败)
    Spark基础-scala学习(七、类型参数)
    JMH实践-代码性能测试工具
    Spark基础-scala学习(五、集合)
    [JavaWeb基础] 012.Struts2 自定义标签使用
    html5学习之路_003
    [Objective-C] 017_UI篇_UIView(中)
  • 原文地址:https://www.cnblogs.com/ma-nong01/p/14323442.html
Copyright © 2020-2023  润新知