3 Allenzyg

尚未进行身份认证

我要认证

一个努力善良的代码”狗”

等级
TA的排名 9w+

MySQL原理探索——19 为什么我只查一行的语句,也执行这么慢

19 为什么我只查一行的语句,也执行这么慢一般情况下,如果我跟你说查询性能优化,你首先会想到一些复杂的语句,想到查询需要返回大量的数据。但有些情况下,“查一行”,也会执行得特别慢。今天,聊聊这个有趣的话题,看看什么情况下,会出现这个现象。需要说明的是,如果 MySQL 数据库本身就有很大的压力,导致数据库服务器 CPU 占用率很高或 ioutil(IO 利用率)很高,这种情况下所有语句的执行都有可能变慢,不属于我们今天的讨论范围。为了便于描述,我还是构造一个表,基于这个表来说明今天的问题。这个表

2020-08-07 15:13:45

MySQL原理探索——18 为什么这些SQL语句逻辑相同,性能却差异巨大

18 为什么这些SQL语句逻辑相同,性能却差异巨大在MySQL中,有很多看上去逻辑相同,但性能却差异巨大的SQL语句。对这些语句使用不当的话,就会不经意间导致整个数据库的压力变大。今天挑选了三个这样的案例和你分享。希望再遇到相似的问题时,你可以做到举一反三、快速解决问题。案例一:条件字段函数操作假设你现在维护了一个交易系统,其中交易记录表tradelog包含交易流水号(tradeid)、交易员id(operator)、交易时间(t_modified)等字段。为了便于描述,我们先忽略其他字段。

2020-08-07 14:44:37

MySQL原理探索——17 如何正确地显示随机消息

17 如何正确地显示随机消息我在上一篇文章,讲解完order by语句的几种执行模式后,就想到了之前一个做英语学习App的朋友碰到过的一个性能问题。今天这篇文章,就从这个性能问题说起,说说MySQL中的另外一种排序需求,希望能够加深你对MySQL排序逻辑的理解。这个英语学习App首页有一个随机显示单词的功能,也就是根据每个用户的级别有一个单词表,然后这个用户每次访问首页的时候,都会随机滚动显示三个单词。他们发现随着单词表变大,选单词这个逻辑变得越来越慢,甚至影响到了首页的打开速度。现在,如果让你

2020-08-07 14:24:47

MySQL原理探索——16 order by是怎么工作的

16 order by是怎么工作的?在你开发应用的时候,一定会经常碰到需要根据指定的字段排序来显示结果的需求。还是以我们前面举例用过的市民表为例,假设你要查询城市是“杭州”的所有人名字,并且按照姓名排序返回前1000个人的姓名、年龄。假设这个表的部分定义是这样的:CREATE TABLE `t` (`id` int(11) NOT NULL,`city` varchar(16) NOT NULL,`name` varchar(16) NOT NULL,`age` int(11)

2020-08-07 13:54:32

MySQL原理探索——15 答疑文章(一):日志和索引相关问题

15 答疑文章(一):日志和索引相关问题日志相关问题我在第2篇文章《日志系统》中,讲到binlog(归档日志)和redo log(重做日志)配合崩溃恢复的时候,用的是反证法,说明了如果没有两阶段提交,会导致MySQL出现主备数据不一致等问题。那么,在两阶段提交的不同瞬间,MySQL如果发生异常重启,是怎么保证数据完整性的?现在,我们就从这个问题开始吧。我再放一次两阶段提交的图,方便学习下面的内容。图1 两阶段提交示意图这里,我要先和你解释一个误会式的问题。有同学在问到,这个图

2020-08-07 13:41:28

MySQL原理探索——14 count(*)这么慢,我该怎么办

14 count(*)这么慢,我该怎么办在开发系统的时候,你可能经常需要计算一个表的行数,比如一个交易系统的所有变更记录总数。这时候你可能会想,一条select count(*) from t 语句不就解决了吗?但是,你会发现随着系统中记录数越来越多,这条语句执行得也会越来越慢。然后你可能就想了,MySQL怎么这么笨啊,记个总数,每次要查的时候直接读出来,不就好了吗。那么,我们就来聊聊count(*)语句到底是怎样实现的,以及MySQL为什么会这么实现。然后,如果应用中有这种频繁变更并需要统计表

2020-08-07 13:33:55

MySQL原理探索——13 为什么表数据删掉一半,表文件大小不变

13 为什么表数据删掉一半,表文件大小不变经常会有同学来问我,我的数据库占用空间太大,我把一个最大的表删掉了一半的数据,怎么表文件的大小还是没变?那么今天,就聊聊数据库表的空间回收,看看如何解决这个问题。这里,我们还是针对MySQL中应用最广泛的InnoDB引擎展开讨论。一个InnoDB表包含两部分,即:表结构定义和数据。在MySQL 8.0版本以前,表结构是存在以.frm为后缀的文件里。而MySQL 8.0版本,则已经允许把表结构定义放在系统数据表中了。因为表结构定义占用的空间很小,所以我们今

2020-08-07 13:29:23

MySQL原理探索——12 为什么我的MySQL会“抖”一下

12 为什么我的MySQL会“抖”一下平时的工作中,不知道你有没有遇到过这样的场景,一条 SQL 语句,正常执行的时候特别 快,但是有时也不知道怎么回事,它就会变得特别慢,并且这样的场景很难复现,它不只随机,而且持续时间还很短。看上去,这就像是数据库“抖”了一下。今天,我们就一起来看一看这是什么原因。你的 SQL 语句为什么变“慢”了在前面第 2 篇文章《日志系统》中,介绍了 WAL 机制。现在你知道了,InnoDB 在处理更新语句的时候,只做了写日志这一个磁盘操作。这个日志叫作 redo

2020-08-07 13:25:56

MySQL原理探索——11 怎么给字符串字段加索引

11 怎么给字符串字段加索引现在,几乎所有的系统都支持邮箱登录,如何在邮箱这样的字段上建立合理的索引,是我们今天要讨论的问题。假设,你现在维护一个支持邮箱登录的系统,用户表是这么定义的:mysql> create table SUser( ID bigint unsigned primary key, email varchar(64), ... )engine=innodb;由于要使用邮箱登录,所以业务代码中一定会出现类似于这样的语句:mysql> select f1, f

2020-08-07 13:17:41

免费抠图神器!五秒在线搞定抠图

第一款:remove.bg(2018年)网站链接:https://www.remove.bg/详细介绍参考:5秒自动抠图!可能是2018年最强大的去背景神器!第二款:StickerMule(2019年)网站链接:https://www.stickermule.com/trace详细介绍参考:一键去背景!这个新的免费在线抠图神器太好用了!第三款:BgEraser(2020年4月)网站链接:https://bgeraser.com/详细介绍参考:又一个快速抠图神器!免费抠图傻瓜化

2020-08-06 13:31:03

力扣(LeetCode)怎么刷题,以排序算法为例

掌握 LeetCode 刷题方法再开始刷题,属于磨刀不误砍柴工。掌握正确方法是非常重要的。如果你在刷题的时候发现怎么也写不出来,别担心,这是正常的。如果你还发现,之前明明刷过的题,过段时间再做的时候,自己还是不会。别担心,这也是正常的。在这我分享一下我的刷题经验,希望对你有帮助。如果你时间比较紧迫,为了找工作而刷题,我建议你先刷热门推荐,一共两百多道题。在 LeetCode中文版 页面的右侧。先刷热题 HOT 100,再刷精选 TOP 面试题,之后刷其他的题。如果你时间比较充裕,那我建议

2020-08-06 11:09:40

mysql中explain的type的解释

导语:很多情况下,有很多人用各种select语句查询到了他们想要的数据后,往往便以为工作圆满结束了。当一个sql查询语句被写出来之后,其实你的工作只完成了一小半,接下来更重要的工作是评估你自己写的sql的质量与效率。mysql为我们提供了很有用的辅助武器explain,它向我们展示了mysql接收到一条sql语句的执行计划。根据explain返回的结果我们便可以知道我们的sql写的怎么样,是否会造成查询瓶颈,同时根据结果不断的修改调整查询语句,从而完成sql优化的过程。虽然 explain返

2020-08-05 13:51:43

消息中间件(RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ等)的定义、组成、特点、优缺点、应用场景&面试题

大家都参与过网上电商平台的秒杀活动吧,一般的秒杀活动辄几百万的参与人数,而“双十一”的参与人数更是已“亿”为计量单位。那么这些电商平台的系统架构是怎样的,它们是如何做到承担每秒几万、几十万的并发访问请求的,所有的请求都是直接落到数据库的吗?当然,数据库不可能承担如此高的负载请求,那这些系统架构引入了哪些“大杀器”呢?这篇文章将讲解其中的关键技术之一消息中间件,并在文章中进一步对消息中间件做详细的讲解。1. 消息队列1.1什么是消息队列消息队列(Message queue,简称MQ),是指利用

2020-08-03 14:59:49

大数据从小白到大牛!!!

链接: https://pan.baidu.com/s/1IUEY9gDMGPdI_xrVsQIFiA 提取码: tbku

2020-07-31 13:36:29

打造扛得住的MySQL数据库框架!!!

链接:https://pan.baidu.com/s/1X5eqVgwSc6LRlOPeBRULhA提取码:m5ep

2020-07-31 13:59:23

37项目实战+视频+代码+文档!!!

项目实战,拿去不谢。链接:https://pan.baidu.com/s/1cVPBVhVMLSCCLaoe09NTMg提取码:q9mh

2020-07-31 13:52:37

500套简历模板你值得拥有!!!+大厂高薪面试题!!!

一般来说个人简历写的好比较容易被录取,投简历的那么多,茫茫人海,HR为什么要选择你的简历而非别人?HR也会审美疲劳,看到那些写的不好的简历,哪怕你的技术再好,恐怕也会在这一环节被刷下来吧,第一关你都过不了,怎么面试呢。所以写份好简历不仅是你做事的态度,也是对你自己负责,也是对自己更好的封装。简历的重要性我这里就不再赘述了,直接上干货。链接: https://pan.baidu.com/s/1tbMb3GmJREI5zWOl2t2Rpg提取码: 428r...

2020-07-31 13:26:38

Apache Kafka的流式SQL引擎——KSQL

1. KSQL 介绍KSQL 引擎——一个基于流的 SQL。推出 KSQL 是为了降低流式处理的门槛,为处理 Kafka 数据提供简单而完整的可交互式 SQL 接口。KSQL 目前可以支持多种流式操作,包括聚合(aggregate)、连接(join)、时间窗口(window)、会话(session),等等。2. KSQL 与传统数据库的区别KSQL 与关系型数据库中的 SQL 还是有很大不同的。传统的 SQL 都是即时的一次性操作,不管是查询还是更新都是在当前的数据集上进行。而 KSQL 则..

2020-07-30 16:47:49

Redis指南——05 实践

第5章 实践5.1 Python与RedisRedis官方推荐的Python客户端是redis-py① 。注释:①见https://github.com/andymccurdy/redis-py。5.1.1 安装推荐使用pip install redis安装最新版本的redis-py,也可以使用easy_install:easy_ install redis。5.1.2 使用方法首先需要引入redis-py:import redis下面的代码将创建一个默认连接到地址127

2020-07-30 15:01:28

Redis指南——04 进阶(下)

4.4 消息通知场景:粉丝要求给博客加入邮件订阅功能,这样当发布新文章后订阅博客的用户就可以收到通知邮件了。那个粉丝还着重强调了一下:“这个功能对不习惯使用RSS的用户很重要,希望能够加上!”小白心想:“是个好建议!不过话说回来,似乎他还没发现其实我的博客连RSS 功能都没有。” 邮件订阅功能太好实现了,无非是在博客首页放一个文本框供访客输入自己的邮箱地址,提交后博客会将该地址存入Redis的一个集合类型键中(使用集合类型是为了保证同一邮箱地址不会存储多个)。每当发布新文章时,就向收集到的邮箱地址发

2020-07-30 14:32:08

查看更多

勋章 我的勋章
  • 领英
    领英
    绑定领英第三方账户获取
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 签到达人
    签到达人
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 新人勋章
    新人勋章
    用户发布第一条blink获赞超过3个即可获得
  • 阅读者勋章Lv2
    阅读者勋章Lv2
    授予在CSDN APP累计阅读博文达到7天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 分享达人
    分享达人
    成功上传6个资源即可获取