✔1.node.js初体验windows ✔2.commonjs-回顾ES6模块化 ✔3.commonjs的语法介绍 ✔4.commonjs和ES6 Module的区别 ✔5.Bug分类 ✔6.node.js和前端js的区别 ✔7.左关联 ✔8.聚合函数 ✔9.【案例】统计上班时间 ✔10.数据库的索引 |
|
感受: 1)时间仿佛越走越快,不知道你是不是也这么觉得。意识到这一点,我挺开心的,因为我知道,我耽误不起时间的浪费了,要做的事情还有很多,拖下的体系课未完成的,要花时间完成,不能就不了了之。觉得此时此刻考虑啥都是多余的,顾虑啥都是耽误时间。脑袋里飘过《麦田里的守望者》的一句话: 你一定得认识到自己想往哪个方向发展,然后一定要对准那个方向出发,要马上,你再也浪费不起多一秒钟的时间了,你浪费不起! 2)除了学习,还需要在刷面试题上下功夫。 |
由此图,我们引出下面的问题。(欢迎读到此处的你进行补充)
索引是什么?
索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址。
由此会引出 索引的类型有哪些?
MySQL支持多种类型的索引,其中最常见的是B-tree索引。以下是MySQL支持的主要索引类型:
1.B-tree索引:B-tree(Balanced Tree)索引是最常见的索引类型,也是默认的索引类型。它适用于所有数据类型,并且支持前缀索引和范围查询。
2.哈希索引:哈希(Hash)索引适用于等值查询,对于任何给定的值,哈希索引都会计算出一个固定长度的哈希值,并将其用于查找匹配的行。哈希索引不支持范围查询,也不能用于排序。
3.全文索引:全文(Fulltext)索引适用于文本数据类型的列,如VARCHAR、TEXT等。它可以提供基于自然语言的文本查询,包括关键字搜索和短语搜索等。
4.空间索引:空间(Spatial)索引适用于具有地理位置信息的数据类型,如点、线和多边形等。空间索引支持几何对象之间的空间关系查询,如距离和相交等。
5.全部列索引:全列索引(Covering Index)是一种包含所有查询列的索引类型。它可以通过只使用索引数据来避免访问表数据,从而提高查询性能。
此外,MySQL还支持组合索引,即将多个列合并为一个索引,以提高查询效率。在使用索引时,需要根据实际情况选择合适的索引类型和组合方式。(面试问道索引类型的时候,把这句话说出来)
主键 唯一键
在MySQL中,主键和唯一键是常用的两种约束类型,用于保证表中数据的唯一性。
主键(Primary Key):主键是用来唯一标识表中每一行数据的列或列组合。主键列的值必须唯一且不为空,且每个表最多只能有一个主键。MySQL会自动为主键创建一个索引,以加速数据的访问和更新。在创建主键时,可以使用AUTO_INCREMENT选项来自动为列生成唯一的、递增的数字值。
唯一键(Unique Key):唯一键也是用来保证表中每一行数据的唯一性。唯一键可以由一个或多个列组成,其值必须唯一但可以为空。与主键不同的是,一个表可以拥有多个唯一键,而且唯一键不会自动创建索引,需要手动创建。
索引的作用是什么?
在数据库中数据十分庞大的时候,索引可以大大加快查的速度。
索引为什么可以加快查询速度?
这是因为使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址然后访问相应的数据。
如何形象的理解索引?
可以把索引想象成一本书,书中包含了一些词条(即索引项)和这些词条所在的页码(即物理位置)。当我们需要查找某个词条时,只需要在字典中查找对应的词条,并找到其所在的页码,然后直接跳转到该页码所代表的物理位置,从而快速找到我们所需要的信息。
类比到数据库中,索引就相当于数据库表的字典。它记录了表中某些列的值以及这些值所在的行的物理位置。当我们执行查询时,MySQL会首先在索引中查找匹配的值,然后根据索引中存储的行的物理位置,快速地定位到匹配的数据行。这样,就可以避免对整个表进行扫描,大大提高了查询效率。
需要注意的是,索引并非越多越好,因为索引会占用存储空间、增加维护成本,并且在数据修改时也会带来一定的开销。因此,需要根据具体业务需求和数据特点,合理地设计和使用索引。
过渡使用索引会带来什么问题?
每次表中数据有更新(数据写入和部分情况下的数据更新)时,都需要维护这个目录(索引)进行同步更新,由于操作步骤多了,所以会降低表中数据更新的速度。