代码编织梦想

在这里插入图片描述
基础相关

1、关系型和非关系型数据库的区别?

关系型数据库的优点

  • 容易理解,因为它采用了关系模型来组织数据。

  • 可以保持数据的一致性。

  • 数据更新的开销比较小。

  • 支持复杂查询(带 where 子句的查询)

非关系型数据库(NOSQL)的优点

  • 无需经过 SQL 层的解析,读写效率高。

  • 基于键值对,读写性能很高,易于扩展

  • 可以支持多种类型数据的存储,如图片,文档等等。

  • 扩展(可分为内存性数据库以及文档型数据库,比如 Redis,MongoDB,HBase 等,适合场景:数据量大高可用的日志系统/地理位置存储系统)。

2、详细说一下一条 MySQL 语句执行的步骤

Server 层按顺序执行 SQL 的步骤为:

  • 客户端请求 -> 连接器(验证用户身份,给予权限)

  • 查询缓存(存在缓存则直接返回,不存在则执行后续操作)

  • 分析器(对 SQL 进行词法分析和语法分析操作)

  • 优化器(主要对执行的 SQL 优化选择最优的执行方案方法)

  • 执行器(执行时会先看用户是否有执行权限,有才去使用这个引擎提供的接口)-> 去引擎层获取数据返回(如果开启查询缓存则会缓存查询结果)

索引相关

3、MySQL 使用索引的原因?

根本原因

  • 索引的出现,就是为了提高数据查询的效率,就像书的目录一样。

  • 对于数据库的表而言,索引其实就是它的“目录”。

扩展

  • 创建唯一性索引,可以保证数据库表中每一行数据的唯一性。

  • 帮助引擎层避免排序和临时表

  • 将随机 IO 变为顺序 IO,加速表和表之间的连接。

4、索引的三种常见底层数据结构以及优缺点

三种常见的索引底层数据结构:分别是哈希表、有序数组和搜索树。

  • 哈希表这种适用于等值查询的场景,比如 memcached 以及其它一些 NoSQL 引擎,不适合范围查询。

  • 有序数组索引只适用于静态存储引擎,等值和范围查询性能好,但更新数据成本高。

  • N 叉树由于读写上的性能优点以及适配磁盘访问模式以及广泛应用在数据库引擎中。

  • 扩展(以 InnoDB 的一个整数字段索引为例,这个 N 差不多是 1200。棵树高是 4 的时候,就可以存 1200 的 3 次方个值,这已经 17 亿了。考虑到树根的数据块总是在内存中的,一个 10 亿行的表上一个整数字段的索引,查找一个值最多只需要访问 3 次磁盘。其实,树的第二层也有很大概率在内存中,那么访问磁盘的平均次数就更少了。)

5、索引的常见类型以及它是如何发挥作用的?

根据叶子节点的内容,索引类型分为主键索引和非主键索引。

  • 主键索引的叶子节点存的整行数据,在InnoDB里也被称为聚簇索引。

  • 非主键索引叶子节点存的主键的值,在InnoDB里也被称为二级索引。

6、MyISAM 和 InnoDB 实现 B 树索引方式的区别是什么?

  • InnoDB 存储引擎:B+ 树索引的叶子节点保存数据本身,其数据文件本身就是索引文件。

  • MyISAM 存储引擎:B+ 树索引的叶子节点保存数据的物理地址,叶节点的 data 域存放的是数据记录的地址,索引文件和数据文件是分离的。

7、InnoDB 为什么设计 B+ 树索引?

两个考虑因素:

  • InnoDB 需要执行的场景和功能需要在特定查询上拥有较强的性能。

  • CPU 将磁盘上的数据加载到内存中需要花费大量时间。

为什么选择 B+ 树:

  • 哈希索引虽然能提供O(1)复杂度查询,但对范围查询和排序却无法很好的支持,最终会导致全表扫描。

  • B 树能够在非叶子节点存储数据,但会导致在查询连续数据可能带来更多的随机 IO。

  • 而 B+ 树的所有叶节点可以通过指针来相互连接,减少顺序遍历带来的随机 IO。

  • 普通索引还是唯一索引?

    由于唯一索引用不上 change buffer 的优化机制,因此如果业务可以接受,从性能角度出发建议你优先考虑非唯一索引。

8、什么是覆盖索引和索引下推?

覆盖索引:

  • 在某个查询里面,索引 k 已经“覆盖了”我们的查询需求,称为覆盖索引。

  • 覆盖索引可以减少树的搜索次数,显著提升查询性能,所以使用覆盖索引是一个常用的性能优化手段。

索引下推:

  • MySQL 5.6 引入的索引下推优化(index condition pushdown), 可以在索引遍历过程中,对索引中包含的字段先做判断,直接过滤掉不满足条件的记录,减少回表次数。

9、哪些操作会导致索引失效?

  • 对索引使用左或者左右模糊匹配,也就是 like %xx 或者 like %xx% 这两种方式都会造成索引失效。原因在于查询的结果可能是多个,不知道从哪个索引值开始比较,于是就只能通过全表扫描的方式来查询。

  • 对索引进行函数/对索引进行表达式计算,因为索引保持的是索引字段的原始值,而不是经过函数计算的值,自然就没办法走索引。

  • 对索引进行隐式转换相当于使用了新函数。

  • WHERE 子句中的 OR语句,只要有条件列不是索引列,就会进行全表扫描。

10、字符串加索引

  • 直接创建完整索引,这样可能会比较占用空间。

  • 创建前缀索引,节省空间,但会增加查询扫描次数,并且不能使用覆盖索引。

  • 倒序存储,再创建前缀索引,用于绕过字符串本身前缀的区分度不够的问题。

  • 创建 hash 字段索引,查询性能稳定,有额外的存储和计算消耗,跟第三种方式一样,都不支持范围扫描。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_73583876/article/details/128753865

数据库概述及关系型数据库mysql—crud增删改查基础入门_kfie66的博客-爱代码爱编程

  一,数据库概述 1.什么是数据库? 数据库(DataBase,DB):指长期保存在计算机的存储设备上,按照一定规则组织起来,可以被各种用户或应用共享的数据集合. 文件系统, 数据的仓库 2.数据库管理系统? 数据库管理系统(DataBase Management System,DBMS):指一种管理和操作数据库的大型软件,用于建立、使用

关系型数据库mysql的简单介绍_weixin_44419364的博客-爱代码爱编程_mysql关系型数据库是什么

我是只刚入行的小白,当作写笔记,会记录也会转载 知道的跳过,不知道路过 当然,我非常欢迎您的莅临指导! 1、什么是数据库? 就是存储数据的仓库。为了方便数据的存储和管理。将数据按照特定的规律存储在磁盘上,通过数据库管理系统

关系型数据库与非关系型数据库区别-20191216笔记-爱代码爱编程

常用关系型数据库:MYSQL SQLSERVER ORACLE DB2。 常用的非关系型数据库:redis MongoDB Memcached CouchDB Neo4j FlockDB 数据库本身的目的是为了实现数据的共享,不同类型的数据库以不同的形式达到同一目的。 关系型数据库以二维表格的形式展示,存储数据,因此需要定义表格,让人知道存储在这里的数据

数据库—01关系型数据库MySQL-爱代码爱编程

从来没有接触过数据库的小白在线瑟瑟发抖。。。。。。。。。 文章目录 一、数据库简介1、为什么需要数据库2、常见的数据库3、数据库分类二、关系型数据库1、E-R模型2、三大范式三、MySQL简介与安装1、简介2、安装(linux下)四、数据库操作五、数据库表的操作六、数据的操作七、PyMySQL数据库编程1、数据库编程2、数据库查询操作3、数据库批量操

031_关系型数据库MySQL_安装配置 & 基础语法 & 利用pymysql与Python交互-爱代码爱编程

MySQL 1. 认识数据库2. 关系型数据库2.1 E-R图2.2 三个范式3. MySQL安装和简介3.1 安装及配置MySQL3.2 允许远程登陆设置4. MySQL数据库操作4.1 数据库操作4.2 表操作4.3 数据操作4.5 查询操作4.5.1 查询基本语法4.5.2 【重要】消除重复行4.5.3 按照条件进行查询4.5.4 分组4.5

NOSQL非关系型数据库之Redis介绍与数据类型(一)-爱代码爱编程

NOSQL概述 什么是NOSQL 概念:   NOSQL:Not Only SQL 不仅仅是SQL,通常指的是非关系型的数据库。MySQL和Oracle都是属性关系型数据库。特点关系型数据库非关系型数据库存储介质以文件的方式保存在硬盘中通常只存储在内存中,服务器关闭数据会部分或全部丢失优点数据库可以永久保存存取速度非常快缺点1)数据添加有校验的过程

小白学习一MySQL数据库(1) 创建数据库 修改数据库 删除数据库-爱代码爱编程

大家好! 我叫风清云淡,有句话说“相识是缘”,我也希望多多认识一些志同道和的朋友。作为一名互联网行业的小萌新,写博客一方面是为了记录自己的学习过程,另一方面是总结自己所犯的错误希望能够帮助到很多和自己一样处于起步阶段的萌新。但由于其专业水平有限😂,博客中难免会有一些bug出现,有错误之处还请各位大佬多多赐教! 由于现在越来越多的人未经本人同意直接爬

MySQL数据库小白入门-爱代码爱编程

文章目录 一、数据库的基本概念1.1 数据(Data)1.2 表1.3 数据库1.4 数据库管理系统(DBMS)1.5 数据库系统二、数据库系统发展史2.1 第一代数据库2.2 第二代数据库2.3 第三代数据库三、 当今主流数据库介绍四、关系数据库五、非关系数据库六、MySQL数据库介绍七、MySQL商业版和社区版八、SQL语言概述8.1 SQL语

Java小白学习指南【day53】---万能的非关系型数据库Redis-爱代码爱编程

文章目录 一、关系型数据库与非关系型数据库二、Redis概述1、特点:2、使用场景3、MySQL与Redis对比三、安装认识Redis(重点)Redis存储值支持的解构:四、使用redis-cli 客户端操作redis1、启动窗口2、redis对String的操作3、redis对Key的操作4、redis对库的操作5、redis对List的操作6、

文档型非关系数据库MongoDB经验总结-爱代码爱编程

文档型非关系数据库MongoDB 数据库基础概念 数据:能够输入到计算机中并被识别处理的信息集合数据结构:研究一个数据集合中,数据元素关系数据库:按照数据结构,存储管理数据的仓库。数据仓库是在数据库管理系统管理控制下在一定介质中 创建的数据库管理系统:数据库管理软件,用于建立维护操作数据库数据库系统:由数据库和数据库管理系统等构成的数据库开发工具集合。

NoSQL非关系型数据库-爱代码爱编程

1 NoSQL简介        NoSQL(NoSQL = Not Only SQL ),意为反 SQL 运动,是一项全新的数据库革命性运动,2000 年前就有人提出,发展至 2009 年趋势越发高涨。它是指运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。        随着互联网 web2.0 网站的兴起

非关系型数据库讲解 | 小白如何快速实现非关系型数据库MongoDB(NoSQL)的搭建,配演示视频-爱代码爱编程

文末配演示视频 文章目录 一、使用步骤1.相关下载器下载MongoDB2.解压下载好的MongoDB3.解压至本地电脑4.创建MongoDB.cfg文件5.将配置信息写入Mongo.cfg中6.创建相关文件夹7.数据文件夹总结 一、使用步骤 具体步骤见图1-7 1.相关下载器下载MongoDB 图1 百度网盘下载MongoDB 2.

mysql数据库(小白入门版)_隐藏着的光的博客-爱代码爱编程

MySQL数据库(小白入门版) 数据库的基本概念 一、数据库基本概念 数据 使用一些介质进行存储,例如文字存在文档中 数据库可以完成数据持久化保存+快速提取 那么想要实现以上功能,需要编写一系列的规则–》SQL语句

mysql小白教程(持续更新ing)_一只大猿的博客-爱代码爱编程

目录 1. pre1.1 什么是数据库1.2 数据库分类1.3 MySQL的安装与使用1.4 创建数据库1.5 连接数据库 2. 操作数据库2.1 操作数据库2.2 列的数据类型2.3 数据库的字段属性*2.4