数据库
文章平均质量分 87
程序员啊粥
比你优秀的人比你还努力,你有什么资格不去奋斗!
展开
-
搞定面试官 - 为什么在 MySQL 中使用 Delete 删除数据之后,表数据文件大小为什么没变?
大家好,我是啊粥,昨天我们介绍了 MySQL 索引的模型。文末,我留了一个问题,在我们执行 delete 命令删除数据的时候,为什么表数据文件大小没变化。这也是我以前面试遇到过的一个问题,今天就给大家分享一下具体原因。一般来说,我们如果想删除整个变的情况下,我们会直接使用 drop table 来回收表空间,但这是建立在我们以后不再用这张表时。但是我们在业务开发中,更长碰到的是使用 delete 来删除具体的业务数据行,InnoDB 在处理删除的时候会将空间地址标记为删除,但是并不会真正删除。因为它原创 2022-08-13 23:06:06 · 1548 阅读 · 0 评论 -
搞定面试官 - MySQL 中你知道如何计算一个索引的长度嘛?
大家好,我是程序员啊粥。今天给大家分享一个我遇到过的比较少见的面试题,那就是 MySQL 中如何计算一个索引的长度。说实话,我第一次遇到这个问题的时候想当然的以为索引长度就是我们建表时定义的字段长度,如果是联合索引,那就是多个字段长度相加。事实证明,在我说出上述回答之后,面试官就让我带着简历跑路了。于是乎,我仔细查阅了相关资料,发现索引长度这个计算方式还是有点意思的,索性给大家分享一下。首先,我们要知道 MySQL Innodb 引擎对于索引的长度是有限制的,最大为 767 字节。你采用不同的字原创 2022-08-13 23:21:36 · 408 阅读 · 0 评论 -
搞定面试官 - 可以讲一下你平时是如何进行 SQL 性能分析的嘛?
SQL 性能分析大家好,我是程序员啊粥,这段时间一直在分享 MySQL 索引系列的文章,我们学会了B+ 树索引模型,以及索引长度的计算、明明使用 Delete 把数据删除了,但是为什么磁盘上的数据文件大小没变?等内容,今天开始我们学习 SQL 的优化。说起 SQL 优化,我们需要知道一个 SQL 的执行频率,假如说你有一条慢 SQL,好几个月才执行一次,那我觉得你其实也没啥花费精力优化它的必要,毕竟执行频率太低,投入产出比不足。SQL 执行频率关于查询 SQL 执行频率,我们可以使用 show gl原创 2022-08-14 17:33:42 · 1946 阅读 · 0 评论 -
搞定面试官 - 可以介绍一下在 MySQL 中你平时是怎么使用 COUNT() 的嘛?
大家好,我是程序员啊粥。相信在大家的工作中,有很多的功能都需要用到 count(*) 来统计表中的数据行数。同时,对于一些大数据的表,用 count 都是瑟瑟发抖,往往会结合缓存等进行处理。那么,我们今天就来分析一下,在 InnoDB 中,关于 count 的一些处理措施和优化。常见的 count 使用方式有三种count(*)count(主键 Id)/count(某个字段)count(1)首先 count(*)、count(主键 Id)/count(某个字段) 和 count(1) 都表原创 2022-08-15 00:07:18 · 823 阅读 · 1 评论 -
搞定面试官 - 你可以介绍一下在 MySQL 中,哪些情况下索引会失效嘛?
关于索引失效和索引使用原则,需要遵循最最前缀匹配原则,这是 B+ 树的索引模型决定的。此外,不当的使用方式,会造成索引的部分失效,比如范围查询、字符串不加引号,使用索引列字段进行函数运算以及使用 Or 查询条件时其中某个字段没有索引等等。......原创 2022-08-14 16:35:57 · 574 阅读 · 0 评论 -
搞定面试官 - 可以介绍一下 MySQL InnoDB 引擎的索引模型嘛?
大家好,我是啊粥。接下来的几天我们会开启一个全新的系列文章,那就是搞定面试官系列,我会把常见的面试知识通过这个专栏写出来,比如我们常见的 Java、MySQL、Redis、MQ 以及其他的一些技术框架。现在最先开启的是 MySQL 系列,今天先来分享我们最常见的一个面试问题,那就是关于 MySQL 的索引。相信很多人在面试中会遇到关于 MySQL 索引的相关知识,从 MySQL 的架构到索引模型,然后再到表设计,SQL 优化等等。首先,我们来看下索引是什么?索引概述索引是一种帮助 MySQL 高原创 2022-08-13 10:55:12 · 330 阅读 · 0 评论 -
MySQL中 int(11)和int(10)有没有区别
引言依稀还记得有次面试,有面试官问我int(10)与int(11)有什么区别,当时觉得就是长度的区别吧!面试官最后也没有给反馈,我也就以为自己答对了。直到有一次有个同学又跟我谈起这个事,才去查了以下,发现事情并没有哪么简单… …最后查出的结果是:这里的M代表的并不是存储在数据库中的具体的长度,以前总是会误以为int(3)只能存储 3个长度的数字,int(11)就会存储 11 个长度的数字,这是...原创 2019-01-21 13:08:44 · 38006 阅读 · 6 评论 -
【MySQL(9)| undo log知识补充以及MySQL 系列整理 】
很开心终于更新完了MySQL进阶学习系列文章,其中有原创内容,也有转载你内容,可能有人会问,为什么不全部原创?其实我是写好原自己的文章了(同步更新到了我的博客),但是通过找一些资料,发现一些文章确实要比我写的内容好上很多,为了在公众号呈现更好的内容给大家,也就取其精华去其糟粕,不重复造轮子,所以有些我不擅长,掌握的不好的方面选择了文章转载,例如最后一篇就是阿飞大神所写 。 为了大家更方便...原创 2019-01-09 10:14:19 · 213 阅读 · 1 评论 -
【MySQL (8) |深入InnoDB空间及索引页文件结构 】
本文来自公众号 阿飞的博客 公号ID : AfeiJavaerInnoDB数据存储模型用"spaces"表示,也被称为"tablespaces",有时候也被称为"file spaces",一个space可能包含多个操作系统级别的实际文件(例如ibdata1,ibdata2等)。但是只是被当做一个逻辑文件:多个物理文件只是被视为物理连接在一起。InnoDB中每个space都会被分配一个...转载 2019-01-09 10:11:14 · 596 阅读 · 1 评论 -
【MySQL(7)| 详细分析MySQL事务日志undo log】
原文地址:https://www.cnblogs.com/f-ck-need-u/archive/2018/05/08/9010872.html接上一篇内容 【MySQL (6) | 详细分析MySQL事务日志redo log】 今天讨论 undo log基本概念undo log 有两个作用:提供回滚和多个行版本控制(MVCC)。在数据修改的时候,不仅记录了redo,还记录了相...转载 2019-01-09 10:08:41 · 522 阅读 · 12 评论 -
【MySQL (6) | 详细分析MySQL事务日志redo log】
原文地址:https://www.cnblogs.com/f-ck-need-u/archive/2018/05/08/9010872.html引言为了最大程度避免数据写入时 IO 瓶颈带来的性能问题,MySQL 采用了这样一种缓存机制:当修改数据库内数据时,InnoDB 先将该数据从磁盘读物到内存中,修改内存中的数据拷贝,并将该修改行为持久化到磁盘上的事务日志(先写 redo l...转载 2019-01-09 10:06:15 · 600 阅读 · 0 评论 -
【MySQL (4) | 五分钟搞清楚InnoDB锁机制】
锁锁是用于管理不同事务对共享资源的并发访问表锁和行锁的区别:在加锁效率、锁定粒度以及冲突概率上,表锁肯定是大于行锁的但是在并发性能上,表锁远低于行锁。表锁是锁定了整个表,在加锁期间,无论读写,这个表的数据都是锁定的,相反行锁只是锁定了这个表中的一条数据,其他数据仍然可以操作,这就可很好的提高了数据库的并发性能。Mysql Innodb 锁类型 共享锁 Shared...原创 2019-01-09 10:04:18 · 714 阅读 · 0 评论 -
Mysql数据库死锁 及 解除 死锁的方法
第一种方式1.查看Mysql是否死锁语法: SHOW OPEN TABLES [FROM db_name] [LIKE 'pattern']语义:列举在表缓存中当前被打开的非TEMPORARY表查询结果包含以下列内容 Database Table In_use Name_locked·Database:含有该表的数据库·Table:表名...原创 2018-08-22 11:22:19 · 4465 阅读 · 1 评论 -
【MySQL(1)| B-tree和B+tree】
B+树索引是B+树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引。B+树中的B代表平衡(balance),而不是二叉(binary),因为B+树是从最早的平衡二叉树演化而来的。在讲B+树之前必须先了解二叉查找树、平衡二叉树(AVLTree)和平衡多路查找树(B-Tree),B+树即由这些树逐步优化而来。二叉查找树定义二叉树具有以下性质:左子树的键值小于根的键值,...原创 2018-12-12 14:13:33 · 196 阅读 · 0 评论 -
【MySQL(2)| MySQL索引机制】
什么是索引?索引是存储引擎用于快速找到记录数据行的一种分散存储的数据结构。索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要。在数据量较小且负载较低时,不恰当的索引对性能的影响可能还不明显,但是当数据量逐渐增大时,性能则会急剧下降。所以 正确的创建合适的索引是提升数据库查询性能的基础。为什么要使用索引?索引可以把随机IO编程顺序IO索引能极大的...原创 2018-12-12 20:42:33 · 871 阅读 · 1 评论 -
QPS这么高,那就来写个多级缓存吧
查询mysql数据库时,同样的输入需要不止一次获取值或者一个查询需要做大量运算时,很容易会想到使用redis缓存。但是如果查询并发量特别大的话,请求redis服务也会特别耗时,这种场景下,将redis迁移到本地减少查询耗时是一种常见的解决方法多级缓存基本架构说明:存储选择了mysql、redis和guava cache。mysql作为持久化,redis作为分布式缓存, guava ca...转载 2018-12-26 17:45:56 · 778 阅读 · 0 评论 -
【面试技巧】如何从建表方面展示自己数据库方面的能力
在面试java web方面的高级程序员时,我一定会问到 jave core,java web(比如Spring MVC,Hibernate等)和数据库相关问题。在数据库方面,对于java 高级程序员而言,不仅需要会基本的增删改查,而且需要具备一定的“优化”方面的技能。 优化是个大话题,可以从索引,建表和SQL 调优(SQL Tuning)方面入手,这个我们来分析下建...转载 2018-12-25 20:50:11 · 396 阅读 · 0 评论 -
【面试技巧】如何通过索引说数据库优化能力
如果我们需要招个Java方面的高级程序员,一方面看年限(本科3年),具体到数据库方面的技能要求,包括如下三个方面: 第一,是否会基本的增删改查,存储过程等技能,是否会用些group by, having,distinct, exist, in, with等高级点的语句。这点一般都没问题,甚至一个刚毕业的大学生或工作经验2年之内的初级程序员也没问题,也就是说,这个是高级程序员必备的...转载 2018-12-25 20:52:11 · 189 阅读 · 0 评论 -
【MySQL(5)| 五分钟搞清楚 MVCC 机制】
Multiversion concurrency control 多版本并发控制并发访问(读或者写)数据库时,对正在事务内处理的数据做多版本的管理,用来避免由于写操作的堵塞,而引发读操作失败的并发问题。引言先看一个案例:1.查看数据的事务隔离级别对事务隔离级别不熟悉的同学可以参考文章 【MySQL (三) | 五分钟搞清楚MySQL事务隔离级别】SELECT @@tx_isolat...原创 2019-01-02 21:28:10 · 305 阅读 · 0 评论 -
【MySQL(3)| 五分钟搞清楚MySQL事务隔离级别】
事务什么是事务?数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;事务是一组不可再分割的操作集合(工作逻辑单元)举个栗子:事务最经典常用的栗子可能就是转账:一个账户少钱了,哪另一个账户肯定要多钱,李永龙说过,亏本的买卖咱可不干,吃亏了不高兴!所以,少钱和多钱这两个操作,要么同时成功,要么同时失败!MySQL中如何开启事务? 手工开启:begin/s...原创 2019-01-09 10:02:08 · 232 阅读 · 0 评论 -
Mybaits Generator 模糊查询 (like)的使用方式
什么是Mybaits GeneratorMybaits Generator是一个开源项目 用于给Mybaits自动生成实体类和XML文件开源项目地址请参阅 Github地址官方文档请参阅 Mybaits Generator文档介绍like 使用使用like时如果不手动拼接 % 等上去的话很难达到模糊搜索的要求,默认生成的SQL语句如下: 如传入变量是 paramsValue...原创 2018-08-22 10:39:51 · 2511 阅读 · 0 评论