MyISAM

[灵魂拷问]MySQL面试高频100问(工程师方向)

倖福魔咒の 提交于 2021-01-13 08:49:59
作者:呼延十 juejin.im/post/5d351303f265da1bd30596f9 前言 本文主要受众为开发人员,所以不涉及到MySQL的服务部署等操作,且内容较多,大家准备好耐心和瓜子矿泉水. 前一阵系统的学习了一下MySQL,也有一些实际操作经验,偶然看到一篇和MySQL相关的面试文章,发现其中的一些问题自己也回答不好,虽然知识点大部分都知道,但是无法将知识串联起来. 因此决定搞一个MySQL灵魂100问,试着用回答问题的方式,让自己对知识点的理解更加深入一点. 此文不会事无巨细的从select的用法开始讲解mysql,主要针对的是开发人员需要知道的一些MySQL的知识点,主要包括索引,事务,优化等方面,以在面试中高频的问句形式给出答案. 索引相关 关于MySQL的索引,曾经进行过一次总结,文章链接在这里 Mysql索引原理及其优化. 1. 什么是索引? 索引是一种数据结构,可以帮助我们快速的进行数据的查找. 2. 索引是个什么样的数据结构呢? 索引的数据结构和具体存储引擎的实现有关, 在MySQL中使用较多的索引有Hash索引,B+树索引等,而我们经常使用的InnoDB存储引擎的默认索引实现为:B+树索引. 3. Hash索引和B+树所有有什么区别或者说优劣呢? 首先要知道Hash索引和B+树索引的底层实现原理: hash索引底层就是hash表,进行查找时

[灵魂拷问]MySQL面试高频100问(工程师方向)

独自空忆成欢 提交于 2021-01-13 08:49:43
前言 本文主要受众为开发人员,所以不涉及到MySQL的服务部署等操作,且内容较多,大家准备好耐心和瓜子矿泉水. 前一阵系统的学习了一下MySQL,也有一些实际操作经验,偶然看到一篇和MySQL相关的面试文章,发现其中的一些问题自己也回答不好,虽然知识点大部分都知道,但是无法将知识串联起来. 因此决定搞一个MySQL灵魂100问,试着用回答问题的方式,让自己对知识点的理解更加深入一点.此文不会事无巨细的从select的用法开始讲解mysql,主要针对的是开发人员需要知道的一些MySQL的知识点,主要包括索引,事务,优化等方面,以在面试中高频的问句形式给出答案. 索引相关 1. 什么是索引? 索引是一种数据结构,可以帮助我们快速的进行数据的查找. 2. 索引是个什么样的数据结构呢? 索引的数据结构和具体存储引擎的实现有关, 在MySQL中使用较多的索引有Hash索引,B+树索引等,而我们经常使用的InnoDB存储引擎的默认索引实现为:B+树索引. 3. Hash索引和B+树所有有什么区别或者说优劣呢? 首先知道Hash索引和B+树索引的底层实现原理: hash索引底层就是hash表,进行查找时,调用一次hash函数就可以获取到相应的键值,之后进行回表查询获得实际数据.B+树底层实现是多路平衡查找树.对于每一次的查询都是从根节点出发,查找到叶子节点方可以获得所查键值

[灵魂拷问]MySQL面试高频100问(工程师方向)

ぃ、小莉子 提交于 2021-01-13 08:47:04
前言 本文主要受众为开发人员,所以不涉及到MySQL的服务部署等操作,且内容较多,大家准备好耐心和瓜子矿泉水. 前一阵系统的学习了一下MySQL,也有一些实际操作经验,偶然看到一篇和MySQL相关的面试文章,发现其中的一些问题自己也回答不好,虽然知识点大部分都知道,但是无法将知识串联起来. 因此决定搞一个MySQL灵魂100问,试着用回答问题的方式,让自己对知识点的理解更加深入一点.此文不会事无巨细的从select的用法开始讲解mysql,主要针对的是开发人员需要知道的一些MySQL的知识点,主要包括索引,事务,优化等方面,以在面试中高频的问句形式给出答案. 索引相关 1. 什么是索引? 索引是一种数据结构,可以帮助我们快速的进行数据的查找. 2. 索引是个什么样的数据结构呢? 索引的数据结构和具体存储引擎的实现有关, 在MySQL中使用较多的索引有Hash索引,B+树索引等,而我们经常使用的InnoDB存储引擎的默认索引实现为:B+树索引. 3. Hash索引和B+树所有有什么区别或者说优劣呢? 首先知道Hash索引和B+树索引的底层实现原理: hash索引底层就是hash表,进行查找时,调用一次hash函数就可以获取到相应的键值,之后进行回表查询获得实际数据.B+树底层实现是多路平衡查找树.对于每一次的查询都是从根节点出发,查找到叶子节点方可以获得所查键值

面试解析mysql(二)二阶段提交

做~自己de王妃 提交于 2021-01-09 10:53:06
**mysql解密(二) 什么是两阶段提交** 熊大 先看几道面试题: 1、假如dba对你说它可以恢复任意半个月的数据他是怎么做到的呢? 2、一个sql的更新语句执行流程是什么? 3、二阶段提交本质是什么?为什么必须这样做? 先了解下Mysql发展史最早mysql自带的引擎是MyISAM但是他不具备事务的能力只有binlog日志。 而InnoDB 是另一个公司以插件形式引入 MySQL 的带有readlog日志。从而实现了crash-safe的能力 而两阶段提交也是针对InnoDb引擎的 通过上一篇得知mysql其实由两部分组成Service层和存储层 一个查询sql得执行过程 那么看下这两个日志的各自特点 binlog: 性别:女 英文名:binlog 中文名:逻辑日志 住址:mysql高档小区 Service层 年龄:18 特点:喜欢写 详细 的日记**。 风格 :他原先对我笑过三次今天又笑了一次一共三加一次。 备注:Service层姐妹较多连接器、分析器、优化器、执行器、影子(缓存) readlog: 性别:男 英文名:readlog 中文名:物理日志 住址:mysql高档小区 存储层 年龄:20 特点:喜欢写日记 风格 :从恋爱开始到现在我一共对他笑了四次。 readlog日志的补充: readlog共有 4 个文件共 4GB 大小也就是说每个文件是1GB。它有两个pos

[转帖]CENTOS6.6下mysql5.7.11带boost和不带boost的源码安装

☆樱花仙子☆ 提交于 2021-01-08 20:17:53
CENTOS6.6下mysql5.7.11带boost和不带boost的源码安装 本文来自我的github pages博客http: // galengao.github.io/ 即www.gaohuirong.cn https: // www.cnblogs.com/galengao/p/5755788.html 高手的blog Mysql5.7版本更新后有很多变化,比如json等,连安装都有变化,他安装必须要BOOST库,不过mysql的官网源码有带boost库的源码和不带boost库的源码两种,因此有两种安装方式,其实都是一样的,仅仅是不带boost库源码的需要单独安装boost,还有后续文章percona-xtrabackup需要用到boost库 下载软件 到usr/local目录下: cd /usr/local wget http://downloads.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz wget http://cdn.mysql.com//Downloads/MySQL-5.7/mysql-boost-5.7.11.tar.gz wget http://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.11.tar.gz 安装boost 注

京东面试:说说MySQL的架构体系

大兔子大兔子 提交于 2021-01-07 08:03:48
字数:3620,阅读耗时:4分35秒 最近群里一位兄弟在面试中被问到: 「MySQL的架构体系是什么」 。 虽然他搞java开发好几年了,也一直使用的是MySQL数据库,但是面对这个问题依然是一脸懵逼,还以为面试官要问索引、慢查询、性能优化之类的(因为这些都是网上找点面试题背过了)。 但这位面试官不按套路出牌,这位兄弟当场就是脸红耳赤的,心想nnd居然会这么问。其实面试中面试官的问题有千千万,有的问题确实背背面试题就能应对,但不是所有的面试题咱们都能背下来的。 今天我们就来聊聊MySQL的架构体系,尽管咱们是java开发人员,但是在日常开发过程中也会经常和MySQL数据库打交道。如果公司有DBA能干点事还稍微好点,如果是没有DBA或者DBA没什么卵用的情况下,我们还是很有必要了解MySQL的整个体系的,况且在面试中遇到了也是一个加分项。 想要知道一条SQL是怎么查询的,只要对MySQL整个体系搞清楚了,才能说出个123。 所以于情于理,我们很有必要学习一下MySQL的架构体系的。 平时,和小伙伴们聊天的时候,经常会把MySQL当做我们开发的一个软件系统,既然是软件系统,那么就有个架构图,以及架构是如何分层的,每一层的功能是什么。 下面我们就来看看MySQL的整体架构图。 MySQL架构图 再来看看我们开发的系统架构图: 其实还是蛮相似的。都有分层的概念

每日一面

淺唱寂寞╮ 提交于 2021-01-06 09:13:53
问题参考自: https://www.zhihu.com/question/438078173,以下解答思路为个人原创 首先提出假设: 手机号码不会更新,只会插入和删除。 查询包括精确查询某个手机号是否存在,以及获取某一号码段的所有手机号 假设表只有一个字段,就是手机号 phone,并且 设置为主键 。如果不设置主键并且没有唯一索引,InnoDB 会给我们自动生成一个隐藏主键列,浪费空间。 MyISAM or InnoDB 如果插入和删除并不频繁,手机号是提前载入的字典表,而不是用户主动注册而产生的,则 MyISAM 看上去比 InnoDB 要好。因为 MyISAM 不涉及事务,更新都是表级锁。如果是用户触发的插入和删除,则需要用 InnoDB。 字段类型 考虑三种类型,BigInt,Char,Varchar 这几种类型在 InnoDB 引擎下默认行格式的存储方式为: 对于 bigint 类型,如果 不为 NULL,则占用8字节 ,首位为符号位,剩余位存储数字,数字范围是 -2^63 ~ 2^63 - 1 = -9223372036854775808 ~ 9223372036854775807。 如果为 NULL,则不占用任何存储空间 。 对于 定长字段 ,不需要存长度信息直接存储数据即可,如果不足设定的长度则补充。对于 char 类型,补充 0x20, 对应的就是空格。

MySQL中的锁(表锁、行锁,共享锁,排它锁,间隙锁)

≯℡__Kan透↙ 提交于 2021-01-06 04:21:57
锁是计算机协调多个进程或线程并发访问某一资源的机制。 在数据库中,除传统的 计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。 如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一 个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。 从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。 本章我们着重讨论MySQL锁机制 的特点,常见的锁问题,以及解决MySQL锁问题的一些方法或建议。 Mysql用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。 这些锁统称为悲观锁(Pessimistic Lock)。 MySQL锁概述 相对其他数据库而言,MySQL的锁机制比较简单,其最 显著的特点是不同的存储引擎支持不同的锁机制。 比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking); BDB存储引擎采用的是页面锁(page-level locking),但也支持表级锁; InnoDB存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况下是采用行级锁。 表级锁 : 开销小,加锁快; 不会出现死锁; 锁定粒度大,发生锁冲突的概率最高,并发度最低。 行级锁 : 开销大,加锁慢; 会出现死锁; 锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

数据库是如何分库,如何分表的?

依然范特西╮ 提交于 2020-12-31 11:07:21
点击上方“ 猿程之家 ”,选择“置顶公众号” 关键时刻,第一时间送达! 阅读本文需要5分钟 一. 数据切分 关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库、优化索引,做很多操作时性能仍下降严重。此时就要考虑对其进行切分了,切分的目的就在于减少数据库的负担,缩短查询时间。 数据库分布式核心内容无非就是数据切分(Sharding) ,以及切分后对数据的定位、整合。数据切分就是将数据分散存储到多个数据库中,使得单一数据库中的数据量变小,通过扩充主机的数量缓解单一数据库的性能问题,从而达到提升数据库操作性能的目的。 数据切分根据其切分类型,可以分为两种方式:垂直(纵向)切分和水平(横向)切分 1、垂直(纵向)切分 垂直切分常见有垂直分库和垂直分表两种。 垂直分库 就是根据业务耦合性,将关联度低的不同表存储在不同的数据库。做法与大系统拆分为多个小系统类似,按业务分类进行独立划分。与"微服务治理"的做法相似,每个微服务使用单独的一个数据库。如图: 垂直分表 是基于数据库中的"列"进行,某个表字段较多,可以新建一张扩展表,将不经常用或字段长度较大的字段拆分出去到扩展表中。在字段很多的情况下(例如一个大表有100多个字段),通过"大表拆小表",更便于开发与维护,也能避免跨页问题

浅谈MySQL架构体系

别说谁变了你拦得住时间么 提交于 2020-12-31 10:35:22
一 数据库和数据库实例 在MySQL的学习研究中,存在两个非常容易混淆的概念,即数据库和数据库实例。在MySQL中,数据库和数据库实例定义如下: 数据库:存储数据的集合; 数据库实例:操作数据库的集合。 如上定义很清楚了,数据库是用来存储数据的,数据库实例是用来操作数据的,从操作系统的角度,数据库实例表现为一个进程,对应多个线程, 在非集群数据库架构中,数据库与数据库实例存在一 一对应关系,在数据库集群中,可能存在多个数据库实例操作一个数据库情况,即多对一关系。 二 MySQL基架 对于MySQL来说,虽然经历了多个版本迭代(MySQL5.5,MySQL 5.6,MySQL 5.7,MySQL 8),但每次的迭代,都是基于MySQL 基架的,MySQL基架大致包括如下几大模块组件: (1)MySQL向外提供的交互接口(Connectors) (2)管理服务组件和工具组件(Management Service & Utilities) (3)连接池组件(Connection Pool) (4)SQL接口组件(SQL Interface) (5)查询分析器组件(Parser) (6)优化器组件(Optimizer) (7)缓存主件(Caches & Buffers) (8)插件式存储引擎(Pluggable Storage Engines) (9)物理文件(File System)