文章目录提示:本文章的内容来源于自己所学的一些知识以及网络
- 前言
- 1、MySQL常用的存储引擎有哪些?了解过吗?
- 2、什么是索引?MySQL常见的索引数据结构?Hash索引和B+树索引的区别,以及应用场景?
- 二、使用步骤
- 1.引入库
- 2.读入数据
- 总结
前言
博主理解:其实在Java后端面试中,所谓的“八股文”并不是让大家完整地背下来,只是将自己学会的知识,用自己的语言讲给面试官听,面试官希望听到的是你对这个知识点的理解,深度。“八股文”并不是一门技术,希望各位道友不要过多地痴迷,能够解决Bug以及对业务逻辑采用合适的解决方案才是一个程序员基本素养。这个面经系列我会一直更新下去,如果对你有帮助,麻烦点个关注,谢谢!
1、MySQL常用的存储引擎有哪些?了解过吗?
关键字:支持事务、行级锁、外键
- InnoDB
InnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在 MySQL 5.5 之后,InnoDB是默认的MySQL 存储引擎。- DML操作遵循ACID模型,支持事务
- 行级锁,提高并发访问性能;
- 支持外键 FOREIGN KEY约束,保证数据的完整性和正确性
- 文件:xxx.ibd:xxx代表的是表名,innoDB引擎的每张表都会对应这样一个表空间文件,存储该表的表结构、数据和索引。
- 逻辑存储结构(段–>区–>页–>行)
- 表空间:InnoDB存储引擎逻辑结构的最高层,ibd文件其实就是表空间文件,在表空间中可以包含多个Segment段。
- 段 : 表空间是由各个段组成的, 常见的段有数据段、索引段、回滚段等。InnoDB中对于段的管理,都是引擎自身完成,不需要人为对其控制,一个段中包含多个区。
- 区 : 区是表空间的单元结构,每个区的大小为1M。 默认情况下, InnoDB存储引擎页大小为16K, 即一个区中一共有64个连续的页。
- 页 : 页是组成区的最小单元,页也是InnoDB 存储引擎磁盘管理的最小单元,每个页的大小默认为 16KB。为了保证页的连续性,InnoDB 存储引擎每次从磁盘申请 4-5 个区。注意:B+树中的叶子节点存储的数据,实际上是页,页的逻辑结构下面会详细介绍。
- 行 : InnoDB 存储引擎是面向行的,也就是说数据是按行进行存放的,在每一行中除了定义表时所指定的字段以外,还包含两个隐藏字段。
- MyISAM
- 不支持事务,不支持外键
- 支持表锁,不支持行锁
- 访问速度快
关于InnoDB的页结构如下:
可以看出在页中对应着四条记录,页目录记录的是相应的主键索引最大值,这也就解释了在叶子节点中实际上存的是页(page),而每个页节点中存的才是表中的一行行数据,这里还牵涉到B+树在三层的时候能够存在多少行数据的问题,如下:
假设每个页的主键索引为int型,占用4字节,每页的地址占用6字节,加起来就是10字节,我们知道在B+树中,非叶子节点是不存数据的,只存索引,对应着是图中的绿色框,每页的容量固定为16kb,则绿色的框(第一层)可以管理1638页,这样就不难计算出两层的B+树能够存储多少行数据了。假设一页能够存8条数据(每个数据占用2kb)那么两层的B+树能够存数据1638*(16kb/2kb)=13104条数据,那么三层B+树存储的数据量为1638*13104=21464352,也就是两千万条数据,一般来讲希望MySQL的数据量不要超过两千万行,并且B+树不要超过三层,否则会导致查询效率变慢,此时就要采取分库分表的措施(后面我会介绍分库分表的知识点)。
关键字:索引、哈希索引、B+树索引
二、使用步骤 1.引入库代码如下(示例):
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
2.读入数据
代码如下(示例):
data = pd.read_csv(
'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())
该处使用的url网络请求的数据。
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。



