掘友等级
数据缝合工程师
|
某十八线城市世界五百强行业头部公司
获得徽章 0
#每天一个知识点#
> 覆盖索引:
在某个查询里面,索引 k 已经“覆盖了”我们的查询需求,称为覆盖索引。
覆盖索引可以减少树的搜索次数,显著提升查询性能,所以使用覆盖索引是一个常用的性能优化手段。
> 索引下推:
MySQL 5.6 引入的索引下推优化(index condition pushdown), 可以在索引遍历过程中,对索引中包含的字段先做判断,直接过滤掉不满足条件的记录,减少回表次数
#每天一个知识点# MyISAM 和 InnoDB 实现 B 树索引方式的区别是什么?
InnoDB 存储引擎:B+ 树索引的叶子节点保存数据本身,其数据文件本身就是索引文件。
MyISAM 存储引擎:B+ 树索引的叶子节点保存数据的物理地址,叶节点的 data 域存放的是数据记录的地址,索引文件和数据文件是分离的
#每天一个知识点# 索引的三种常见底层数据结构以及优缺点
三种常见的索引底层数据结构:分别是哈希表、有序数组和搜索树。
哈希表这种适用于等值查询的场景,比如 memcached 以及其它一些 NoSQL 引擎,不适合范围查询。
有序数组索引只适用于静态存储引擎,等值和范围查询性能好,但更新数据成本高。
N 叉树由于读写上的性能优点以及适配磁盘访问模式以及广泛应用在数据库引擎中。
扩展(以 InnoDB 的一个整数字段索引为例,这个 N 差不多是 1200。棵树高是 4 的时候,就可以存 1200 的 3 次方个值,这已经 17 亿了。考虑到树根的数据块总是在内存中的,一个 10 亿行的表上一个整数字段的索引,查找一个值最多只需要访问 3 次磁盘。其实,树的第二层也有很大概率在内存中,那么访问磁盘的平均次数就更少了)
#每天一个知识点# MySQL 使用索引的原因
根本原因
索引的出现,就是为了提高数据查询的效率,就像书的目录一样。
对于数据库的表而言,索引其实就是它的“目录”。
扩展
创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
帮助引擎层避免排序和临时表
将随机 IO 变为顺序 IO,加速表和表之间的连接。
#每天一个知识点# 每日一题:
关系型和非关系型数据库的区别?
关系型数据库的优点
容易理解,因为它采用了关系模型来组织数据。
可以保持数据的一致性。
数据更新的开销比较小。
支持复杂查询(带 where 子句的查询)
非关系型数据库(NOSQL)的优点
无需经过 SQL 层的解析,读写效率高。
基于键值对,读写性能很高,易于扩展
可以支持多种类型数据的存储,如图片,文档等等。
扩展(可分为内存性数据库以及文档型数据库,比如 Redis,MongoDB,HBase 等,适合场景:数据量大高可用的日志系统/地理位置存储系统)
#每天一个知识点# MySQL 语句执行的步骤
Server 层按顺序执行 SQL 的步骤为:
客户端请求 -> 连接器(验证用户身份,给予权限)
查询缓存(存在缓存则直接返回,不存在则执行后续操作)
分析器(对 SQL 进行词法分析和语法分析操作)
优化器(主要对执行的 SQL 优化选择最优的执行方案方法)
执行器(执行时会先看用户是否有执行权限,有才去使用这个引擎提供的接口)-> 去引擎层获取数据返回(如果开启查询缓存则会缓存查询结果)
#每天一个知识点# 数据三大范式
第一范式(1NF):字段不可分;
第二范式(2NF):有主键,非主键字段依赖主键;
第三范式(3NF):非主键字段不能相互依赖
下一页