摘要:先说大致的结论(完整结论在文末): 在语义相同,有索引的情况下:group by和distinct都能使用索引,效率相同。 在语义相同,无索引的情况下:distinct效率高于group by。原因是distinct 和 group by都会进行分组操作,但group by可能会进行排序,触发fil
阅读全文
摘要:前言 最近,有开发同事联系我反馈一个问题,说开发环境出现了数据丢失的情况,想让DBA帮忙排查一下是不是数据库的问题。我心想大概率是程序bug,不太可能是数据库的问题。不过还是要排查一下才会心安,毕竟对于一个DBA而言,数据丢失无疑是最令人紧张的一件事情。 问题排查 开始进行排查之前,我先确认了如下问
阅读全文
摘要:思考一个问题,联合索引在B+树中是怎么存储的? 比如在(a,b)字段上面创建联合索引,存储结构类似下面这样: 数据都是先按a字段排序,a字段的值相等时再按b字段排序。 a字段的值是全局有序的,b字段的值是全局无序的,只有在a字段的值相等时才呈现出局部有序。 下面做几道联合索引的经典面试题。 第一题:
阅读全文
摘要:一、背景 本文主要测试MySQL执行update语句时,针对与原数据(即未修改)相同的update语句会在MySQL内部重新执行吗? 二、测试环境 MySQL5.7.25 Centos 7.4 三、binlog_format为ROW 1、参数 2、测试步骤 session1 session2 ses
阅读全文
摘要:目录 谁在消耗cpu?祸首是谁? 用户 IO等待 产生影响 如何减少CPU消耗? 减少等待 减少计算 升级cpu 谁在消耗CPU? 用户+系统+IO等待+软硬中断+空闲 祸首是谁? 用户 用户空间CPU消耗,各种逻辑运算 正在进行大量tps函数/排序/类型转化/逻辑IO访问… 用户空间消耗大量cpu
阅读全文
摘要:毫不夸张的说咱们后端工程师,无论在哪家公司,呆在哪个团队,做哪个系统,遇到的第一个让人头疼的问题绝对是数据库性能问题。如果我们有一套成熟的方法论,能让大家快速、准确的去选择出合适的优化方案,我相信能够快速准备解决咱么日常遇到的80%甚至90%的性能问题。从解决问题的角度出发,我们得先了解到问题的原因
阅读全文
摘要:这是一条标准的查询语句: 这是我们实际上SQL执行顺序: from 子句组装来自不同数据源的数据; where 子句基于指定的条件对记录行进行筛选; group by 子句将数据划分为多个分组; 使用聚集函数进行计算; 使用 having 子句筛选分组; 计算所有的表达式; select 的字段;
阅读全文
摘要:前言: 数据库系统正式上线前,压测是必不可少的一步。数据库系统能承载多少并发,DBA要做到心中有数。 基本概念: TPS/QPS:衡量吞吐量。(TPS:每秒事务处理量(Transaction Per Second)、每秒查询率QPS(Query Per Second)是对一个特定的查询服务器在规定时
阅读全文
摘要:起因 最近好几次有开发同学在钉钉上问我,比如下图: 问题归纳起来就是:在MySQL里面update一条记录,语法都正确的,但记录并没有被更新… 结论 小结:在一条UPDATE语句中,如果要更新多个字段,字段间不能使用“AND”,而应该用逗号分隔。 现象 刚遇到这个问题的时候,我拿到这条语句直接在测试
阅读全文
摘要:MySQL 主从复制是面试中不可避开的重要一环,里面的知识点虽然基础,但是能回答全的同学不多,今天我们再来老生常谈一下。 本文全文内容如下。 1. MySQL 主从 1.1 什么是 MySQL 主从 ? MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MyS
阅读全文
摘要:一、场景还原 当时同事A在线上代码中使用了Mybatis-plus的如下方法 com.baomidou.mybatisplus.extension.service.IServicesaveOrUpdate(T, com.baomidou.mybatisplus.core.conditions.Wra
阅读全文
摘要:想要优化count(*),首先得了解清楚,MySQL是如何处理count(*)的?在MySQL不同版本、不同存储引擎中,对于count(*)的处理方式,是存在差异的。MyISAM使用过MyISAM存储引擎的DBA,应该都有这感觉:不管表有多大,count(*)总是能够秒出结果。这是因为,MyISAM
阅读全文
摘要:什么是MVCC:MVCC(Multi Version Concurrency Control的简称),代表多版本并发控制。与MVCC相对的,是基于锁的并发控制,Lock-Based Concurrency Control)。MVCC最大的优势:读不加锁,读写不冲突。在读多写少的OLTP应用中,读写不
阅读全文
摘要:本文讲述如何查找数据库里重复的行。这是初学者十分普遍遇到的问题。方法也很简单。这个问题还可以有其他演变,例如,如何查找“两字段重复的行”(#mysql IRC 频道问到的问题) 如何查找重复行 第一步是定义什么样的行才是重复行。多数情况下很简单:它们某一列具有相同的值。本文采用这一定义,或许你对“重
阅读全文
摘要:什么是索引下推索引下推(Index Condition Pushdown,简称ICP),是MySQL5.6版本的新特性,用于优化数据查询。 不使用索引条件下推优化时存储引擎通过索引检索到数据,然后返回给MySQL服务器,服务器然后判断数据是否符合条件。 当使用索引条件下推优化时,如果存在某些被索引的
阅读全文
摘要:开发应用程序久了,总想刨根问底,尤其对一些有公共答案的问题。大家都能解释,但是追根究底,都解释不清。凡是都有为什么,而且用数字说明问题是最直观的。本文主要想探究一下连接数据库的细节,尤其是在Web应用中要使用数据库来连接池,以免每次发送一次请求就重新建立一次连接。对于这个问题,答案都是一致的,建立数
阅读全文
摘要:奇怪的慢sql 我们先来看2条sql 第一条: 第二条: 表的索引及数据总情况: 索引:acct_id,create_time 分别是单列索引,数据库总数据为500w。通过 acct_id 过滤出来的结果集在 1w 条左右。 查询结果:第一条要5.018s,第二条0.016s为什么会是这样的结果呢?
阅读全文
摘要:作为DBA工作中都会遇到过数据库服务器CPU飙升的场景,我们该如何快速定位问题?又该如何快速找到具体是哪个SQL引发的CPU异常呢?下面我们说两个方法。聊聊MySQL中如何快速定位占用CPU过高的SQL。 技术人人都可以磨炼,但处理问题的思路和角度各有不同,希望这篇文章可以抛砖引玉。 以一个例子为切
阅读全文
摘要:索引可以提高数据检索的效率,降低数据库的IO成本。 MySQL在300万条记录左右性能开始逐渐下降,虽然官方文档说500~800w记录,所以大数据量建立索引是非常有必要的。 MySQL提供了Explain,用于显示SQL执行的详细信息,可以进行索引的优化。 一、导致SQL执行慢的原因 1. 硬件问题
阅读全文
摘要:在看高性能MySQL第3版(4.1.7节)时,作者建议当存储IPv4地址时,应该使用32位的无符号整数(UNSIGNED INT)来存储IP地址,而不是使用字符串。 但是没有给出具体原因。 为了搞清楚这个原因,查了一些资料,记录下来。 相对字符串存储,使用无符号整数来存储有如下的好处: 节省空间,不
阅读全文