
mysql
zl1zl2zl3
这个作者很懒,什么都没留下…
展开
-
为啥不能用uuid做MySQL的主键!?
作者:Yrion地址:cnblogs.com/wyq178/p/12548864.html前言在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一,单机递增),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究竟有什么坏处?本篇博客我们就来分析这个问题,探讨一下内部的原因。本篇博客的目录 mysql程序实例 使用uuid和自增id的索引结构对比 .转载 2020-09-06 22:33:19 · 389 阅读 · 0 评论 -
字节一面,被连问 MySQL 索引,脸都问绿了。。。
什么是索引?当我们使用汉语字典查找某个字时,我们会先通过拼音目录查到那个字所在的页码,然后直接翻到字典的那一页,找到我们要查的字,通过拼音目录查找比我们拿起字典从头一页一页翻找要快的多,数据库索引也一样,索引就像书的目录,通过索引能极大提高数据查询的效率。索引的实现方式在数据库中,常见的索引实现方式有哈希表、有序数组、搜索树 哈希表哈希表是通过键值对(key-value)存储数据的索引实现方式,可以将哈希表想象成是一个数组,将索引通过哈希函数计算得到该行数据在数组中的位置,然后将数据存到数转载 2020-09-03 13:14:30 · 485 阅读 · 0 评论 -
一文带你了解 MySQL 中的各种锁机制!
作者 |suveng来源 |blog.youkuaiyun.com/qq_37933685/article/details/80717515MySQL中的锁机制,按粒度分为行级锁,页级锁,表级锁,其中按用法还分为共享锁和排他锁.行级锁行级锁是Mysql中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突。其加锁粒度最小,但加锁的开销也最大。行级锁分为共享锁和排他锁.特点开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。...转载 2020-08-19 22:41:03 · 200 阅读 · 0 评论 -
MySQL not exists 真的不走索引么?
在一些业务场景中,会使用NOT EXISTS语句确保返回数据不存在于特定集合,部分同事会发现NOT EXISTS有些场景性能较差,甚至有些网上谣言说”NOT EXISTS不走索引”,哪对于NOT EXISTS语句,我们如何优化呢?以今天优化的SQL为例,优化前SQL为:SELECTcount(1)FROMt_monitormWHERENOTexists(SELECT1FROMt_alarm_realtimeASaWHEREa.resource_i...转载 2020-08-18 11:27:32 · 1906 阅读 · 0 评论 -
Spring事务专题(三)事务的基本概念,Mysql事务处理原理
我重新整理了大纲,思考了很久,决定单独将MySQL的事务实现原理跟Spring中的事务示例分为两篇文章,因为二者毕竟没有什么实际关系,实际上如果你对MySQL的事务原理不感兴趣也可以直接跳过本文,等待接下来两篇应用及源码分析,不过我觉得知识的学习应该慢慢行成一个体系,为了建立一个完善的体系应该要对数据库本身事务的实现有一定认知才行。本文为Spring事务专题第三篇,在前两篇文章中我们已经对Spring中的数据访问有了一定的了解,那么从本文开始我们正式接触事务,在分析Spring中事务的实现之前我们应该要转载 2020-08-13 16:59:47 · 320 阅读 · 0 评论 -
MySQL 的 Binlog 日志处理工具(Canal,Maxwell,Databus,DTS)对比
Canal定位:基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了mysql。原理: canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议 mysql master收到dump请求,开始推送binary log给slave(也就是canal) canal解析binary log对象(原始为byte流) 整个parser过程大致可分为几步: Connection获取上一次转载 2020-08-12 09:37:32 · 592 阅读 · 0 评论 -
干 MySQL 两千万数据的大表优化解决过程,三种厉害的解决方案
问题概述使用阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据量近2000万,保留最近一年的数据量达到4000万,查询速度极慢,日常卡死。严重影响业务。问题前提:老系统,当时设计系统的人大概是大学没毕业,表设计和sql语句写的不仅仅是垃圾,简直无法直视。原开发人员都已离职,到我来维护,这就是传说中的维护不了就跑路,然后我就是掉坑的那个!!!我尝试解决该问题,so,有个这个日志。方案概述方案一:优化现有mysql数据库。优点:不影响现有业务,转载 2020-08-11 21:34:11 · 1488 阅读 · 0 评论 -
MySQL 日期时间类型怎么选?千万不要乱用!
构建数据库写程序避免不了使用日期和时间,对于数据库来说,有多种日期时间字段可供选择,如 timestamp 和 datetime 以及使用 int 来存储 unix timestamp。不仅新手,包括一些有经验的程序员还是比较迷茫,究竟我该用哪种类型来存储日期时间呢?那我们就一步一步来分析他们的特点,这样我们根据自己的需求选择合适的字段类型来存储 (优点和缺点是比较出来的 , 跟父母从小喜欢拿邻居小孩子跟自己比一样的)datetime 和 timestampdatetime 更像日历上面的.转载 2020-08-06 10:31:34 · 600 阅读 · 0 评论 -
我脸都问绿了!二面竟然被问到 MySQL 时间类型 datetime、bigint 及 timestamp 的查询效率。。。
“数据库中可以用datetime、bigint、timestamp来表示时间,那么选择什么类型来存储时间比较合适呢?前期数据准备通过程序往数据库插入50w数据 数据表: CREATETABLE`users`(`id`int(11)NOTNULLAUTO_INCREMENT,`time_date`datetimeNOTNULL,`time_timestamp`timestampNOTNULLDEFAULTCURRENT_TIMESTAMP...转载 2020-08-01 17:17:06 · 287 阅读 · 0 评论 -
面试官问:MySQL 的自增 ID 用完了,怎么办?
既然这块知识点不清楚,那回头就自己动手实践下。首先,创建一个最简单的表,只包含一个自增id,并插入一条数据。createtablet0(idintunsignedauto_incrementprimarykey);insertintot0values(null);通过show命令show create table t0;查看表情况CREATETABLE`t0`(`id`int(10)unsignedNOTNULLAUTO_INCREME...转载 2020-07-24 07:41:47 · 304 阅读 · 0 评论 -
MySQL 也替换了master、slave
MySQL 数据库的开发人员宣布,该团队将停止使用并替换掉数据库源代码和文档中的 master、slave、blacklist 和 whitelist 等术语。在官方发布的博客文章中,MySQL 团队表示,其将用新的术语分别替换当前的术语,分别对应为 source、replica、blocklist 和 allowlist。master 和 slave 术语曾考虑过的一个替代方案是 primary 和 secondary,但最终 MySQL 开发人员以技术准确性为由否定了这一方案。而对于为什转载 2020-07-16 09:11:26 · 809 阅读 · 0 评论 -
为什么 MySQL 使用 B+ 树,而不是 B 树或者 Hash?
为什么 MySQL 使用 B+ 树是面试中经常会出现的问题,很多人对于这个问题可能都有一些自己的理解,但是多数的回答都不够完整和准确。大多数人都只会简单说一下 B+ 树和 B 树的区别,但是都没有真正回答 MySQL 为什么选择使用 B+ 树这个问题,我们在这篇文章中就会深入分析 MySQL 选择 B+ 树背后的一些原因。概述首先需要澄清的一点是,MySQL 跟 B+ 树没有直接的关系,真正与 B+ 树有关系的是 MySQL 的默认存储引擎 InnoDB,MySQL 中存储引擎的主要作用是负.转载 2020-07-01 15:14:42 · 591 阅读 · 1 评论 -
聊聊大厂面试官必问的 MySQL 锁机制
前言前几天有粉丝和我聊到他找工作面试大厂时被问的问题,因为现在疫情期间,找工作也特别难找。他说面试的题目也比较难,都偏向于一两年的工作经验的面试题。他说在一面的时候被问到Mysql的面试题,索引那块自己都回答比较满意,但是问到Mysql的锁机制就比较懵了。因为平时没有关注Mysql的锁机制,当被问到高并发场景下锁机制是怎么保证数据的一致性的和事务隔离性的。他把他面试的过程分享给了我,Mysql高并发锁机制的问题,几乎面大厂都有被问到,Mysql怎么在高并发下控制并发访问的?我细想了一下,转载 2020-06-27 22:45:33 · 394 阅读 · 0 评论 -
MySQL 可重复读,差点背上一个 P0 事故!
P0 事故:余额多扣!这是一个真实的生产事件,事件起因如下:现有一个交易系统,每次产生交易都会更新相应账户的余额,出账扣减余额,入账增加余额。为了保证资金安全,余额发生扣减时,需要比较现有余额与扣减金额大小,若扣减金额大于现有余额,扣减余额不足,扣减失败。账户表(省去其他字段)结构如下:CREATETABLE`account`(`id`bigint(20)NOTNULL,`balance`bigint(20)DEFAULTNULL,...转载 2020-06-18 16:38:23 · 304 阅读 · 0 评论 -
神仙打架:PG 和 MySQL 到底哪个更好用?
概述本文介绍MySQL和PostgreSQL的一些特性对比,让大家了解二者的优劣,更好的做出选择。当前国内的现状,互联网公司使用MySQL的较多,PostgreSQL的使用比例反而不高,但相信看到PG的新特性后,你会爱上她。当然MySQL作为最流行的数据库,依然会吸引大部分人的眼球。PostgreSQL标榜自己是世界上最先进的开源数据库,甚至PG粉丝或者一些PGER宣称,她可以和Oracle相媲美(虽然PG很强大,但是和Oracle还是有差距的,当然PG优势也是显而易见的),而且没有那么昂贵的价格和转载 2020-06-09 09:08:34 · 946 阅读 · 0 评论 -
干货 | 携程异地多活-MySQL实时双向(多向)复制实践
作者简介Roy,携程软件技术专家,负责MySQL双向同步DRC和数据库访问中间件DAL的开发演进,对分布式系统高可用设计、数据一致性领域感兴趣。一、前言携程内部MySQL部署采用多机房部署,机房A部署一主一从,机房B部署一从,作为DR(Disaster Recovery)切换使用。当前部署下,机房B部署的应用需要跨机房进行写操作;当机房A出现故障时,DBA需要手动对数据库进行DR切换。为了做到真正的数据异地多活,实现MySQL同机房就近读写,机房故障时无需进行数据库DR操作,只进行流量切.转载 2020-05-29 09:15:36 · 1021 阅读 · 0 评论 -
实现 MySQL 的 Binlog 近实时同步,这么做就对了!
作者:Throwable来源:juejin.im/post/5e6a6746f265da575c16d678近段时间,业务系统架构基本完备,数据层面的建设比较薄弱,因为笔者目前工作重心在于搭建一个小型的数据平台。优先级比较高的一个任务就是需要近实时同步业务系统的数据(包括保存、更新或者软删除)到一个另一个数据源,持久化之前需要清洗数据并且构建一个相对合理的便于后续业务数据统计、标签系统构建等扩展功能的数据模型。基于当前团队的资源和能力,优先调研了Alibaba开源中间件Canal的使用。这.转载 2020-05-19 19:38:02 · 7569 阅读 · 0 评论 -
图解 MySQL 索引:B-树、B+树,终于搞清楚了!
看了很多关于索引的博客,讲的大同小异。但是始终没有让我明白关于索引的一些概念,如B-Tree索引,Hash索引,唯一索引….或许有很多人和我一样,没搞清楚概念就开始研究B-Tree,B+Tree等结构,导致在面试的时候答非所问!索引是什么?索引是帮助MySQL高效获取数据的数据结构。索引能干什么?提高数据查询的效率。索引:排好序的快速查找数据结构!索引会影响where后面的查找,和order by 后面的排序。一、索引的分类1. 从存储结构上来划分:BTree索引(B-T.转载 2020-05-17 10:43:42 · 418 阅读 · 0 评论 -
一入职!就遇到MySQL亿级大表优化....
作者丨jia-xin出处:https://www.cnblogs.com/YangJiaXin/p/10828244.html“前段时间刚入职一家公司,就遇到了 MySQL 亿级大表优化这事!图片来自 Pexels背景XX 实例(一主一从)xxx 告警中每天凌晨在报 SLA 报警,该报警的意思是存在一定的主从延迟。(若在此时发生主从切换,需要长时间才可以完成切换,要追延迟来...转载 2020-04-21 17:11:16 · 278 阅读 · 0 评论 -
一条简单的更新语句,MySQL是如何加锁的?
看如下一条sql语句:#tableT(idint,namevarchar(20))deletefromTwhereid = 10;MySQL在执行的过程中,是如何加锁呢?在看下面这条语句:select*fromTwhereid=10;那这条语句呢?其实这其中包含太多知识点了。要回答这两个问题,首先需要了解一些知识。相关知识介绍多...转载 2020-04-20 14:10:17 · 421 阅读 · 0 评论 -
推荐 4 款 MySQL 调优工具,大神都在用!
对于正在运行的mysql性能如何?参数设置的是否合理?账号设置的是否存在安全隐患是否了然于胸?俗话说工欲善其事,必先利其器,定期对你的MYSQL数据库进行一个体检,是保证数据库安全运行的重要手段。今天和大家分享几个mysql 优化的工具,你可以使用它们对你的mysql进行一个体检,生成awr报告,让你从整体上把握你的数据库的性能情况。1、mysqltuner-pl这是mysql...转载 2020-04-08 10:22:47 · 461 阅读 · 0 评论 -
一本彻底搞懂MySQL索引优化EXPLAIN百科全书
MySQL逻辑架构介绍日常在CURD的过程中,都避免不了跟数据库打交道,大多数业务都离不开数据库表的设计和SQL的编写,那如何让你编写的SQL语句性能更优呢?先来整体看下MySQL逻辑架构图:MySQL整体逻辑架构图可以分为Server和存储引擎层。Server层:Server层涵盖了MySQL的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),以及...转载 2020-04-07 20:28:51 · 315 阅读 · 0 评论 -
阿里云面试官:如果是MySQL引起的CPU消耗过大,你会如何优化?
谁在消耗cpu?用户+系统+IO等待+软硬中断+空闲祸首是谁?用户用户空间CPU消耗,各种逻辑运算正在进行大量tps函数/排序/类型转化/逻辑IO访问…用户空间消耗大量cpu,产生的系统调用是什么?那些函数使用了cpu周期?IO等待等待IO请求的完成此时CPU实际上空闲如vmstat中的wa 很高。但IO等待增加,wa也不一定会上...转载 2020-03-11 12:04:01 · 336 阅读 · 0 评论 -
MySQL 分库分表与分区的区别和思考
一.分分合合说过很多次,不要拘泥于某一个技术的一点,技术是相通的。重要的是编程思想,思想是最重要的。当数据量大的时候,需要具有分的思想去细化粒度。当数据量太碎片的时候,需要具有合的思想来粗化粒度。1.1 分很多技术都运用了分的编程思想,这里来举几个例子,这些都是分的思想集中式服务发展到分布式服务从Collections.synchronizedMap(x)到1.7Concurr...转载 2020-01-07 17:41:09 · 283 阅读 · 0 评论 -
Mysql高性能优化规范建议,太厉害了!
作者:听风地址:cnblogs.com/huchong/p/10219318.html数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期...转载 2020-01-07 11:21:58 · 300 阅读 · 0 评论 -
InnoDB一棵B+树可以存放多少行数据?
一个问题?InnoDB一棵B+树可以存放多少行数据?这个问题的简单回答是:约2千万。为什么是这么多呢?因为这是可以算出来的,要搞清楚这个问题,我们先从InnoDB索引数据结构、数据组织方式说起。我们都知道计算机在存储数据的时候,有最小存储单元,这就好比我们今天进行现金的流通最小单位是一毛。在计算机中磁盘存储数据最小单元是扇区,一个扇区的大小是512字节,而文件系统(例如XFS/...转载 2019-12-12 15:26:00 · 155 阅读 · 1 评论 -
MySQL 中主键的几种表设计组合的实际应用效果
了解主键、外键、索引主键主键的主要作用是保证表的完整、保证表数据行的唯一性质,① 业务主键(自然主键):在数据库表中把具有业务逻辑含义的字段作为主键,称为“自然主键(Natural Key)”。自然主键的含义就是原始数据中存在的不重复字段,直接使用成为主键字段。这种方式对业务的耦合太强,一般不会使用。② 逻辑主键(代理主键):在数据库表中采用一个与当前表中逻辑信息无关的字段作为...转载 2019-11-29 15:53:20 · 341 阅读 · 0 评论 -
图解 MySQL 索引:B-树、B+树
看了很多关于索引的博客,讲的大同小异。但是始终没有让我明白关于索引的一些概念,如B-Tree索引,Hash索引,唯一索引....或许有很多人和我一样,没搞清楚概念就开始研究B-Tree,B+Tree等结构,导致在面试的时候答非所问!本文中有关存储引擎请查看MySQL存储引擎-InnoDB和MyISAM索引是什么?索引是帮助MySQL高效获取数据的数据结构。索引能干什么?提高数据...转载 2019-11-23 10:06:32 · 194 阅读 · 0 评论 -
介绍 9 款 MySQL 常见的图形化工具,第三款我用了 10 年
趋势MySQL的管理维护工具非常多,除了系统自带的命令行管理工具之外,还有许多其他的图形化管理工具,这里我介绍几个经常使用的MySQL图形化管理工具,供大家参考。MySQL是一个非常流行的小型关系型数据库管理系统,2008年1月16号被Sun公司收购。目前MySQL被广泛地应用在Internet上的中小型 网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站...转载 2019-11-23 09:08:28 · 325 阅读 · 0 评论 -
「mysql优化专题」单表查询优化的一些小总结,非索引设计(3)
上篇讲解了「mysql优化专题」90%程序员都会忽略的增删改优化(2),相信大家都有所收获。接下来这篇是查询优化。其实,大家都知道,查询部分是远远大于增删改的,所以查询优化会花更多篇幅去讲解。本篇会先讲单表查询优化(非索引设计)。然后讲多表查询优化。索引优化设计以及库表结构优化等后面文章再讲。单表查询优化:(关于索引,后面再开单章讲解)(0)可以先使用 EXPLAIN 关键字,让你...转载 2018-11-19 10:45:28 · 271 阅读 · 0 评论 -
SpringBoot + MyBatis + MySQL 读写分离实战
1. 引言读写分离要做的事情就是对于一条SQL该选择哪个数据库去执行,至于谁来做选择数据库这件事儿,无非两个,要么中间件帮我们做,要么程序自己做。因此,一般来讲,读写分离有两种实现方式。第一种是依靠中间件(比如:MyCat),也就是说应用程序连接到中间件,中间件帮我们做SQL分离;第二种是应用程序自己去做分离。这里我们选择程序自己来做,主要是利用Spring提供的路由数据源,以及AOP。然...转载 2019-06-06 15:45:49 · 932 阅读 · 2 评论 -
MySQL:硬盘在24 * 7工作中罢工了,我该怎么办?
虽然他们不承认, 但我还是这个系统的核心, 因为我保存着这个系统最最重要的东西:数据。为了能让Tomcat他们访问, 我提供了几十个数据库连接——不能提供更多了,因为每个连接都要耗费我不少资源。这些天Tomcat他们实在不像话,数据库读写的请求像大海的波涛一样汹涌澎湃,不断向我袭来。996是别想了, 24*7才是残酷人生。我没办法, 只好拼命地压榨硬盘,看着他的磁头在光滑...转载 2019-06-06 15:39:35 · 262 阅读 · 0 评论 -
Redis 如何保持和 MySQL 数据一致
1.MySQL持久化数据,Redis只读数据redis在启动之后,从数据库加载数据。读请求:不要求强一致性的读请求,走redis,要求强一致性的直接从mysql读取写请求:数据首先都写到数据库,之后更新redis(先写redis再写mysql,如果写入失败事务回滚会造成redis中存在脏数据)2.MySQL和Redis处理不同的数据类型 MySQL处理实时性数据,例如...转载 2019-06-06 13:47:07 · 715 阅读 · 0 评论 -
测试 MySQL 性能的几款工具
有一些有用的工具可以测试MySQL 和基于MySQL 的系统的性能。这里将演示如何利用这些工具进行测试。mysqlslap mysqlslap可以模拟服务器的负载,并输出计时信息。它包含在MySQL 5.1 的发行包中,应该在MySQL 4.1或者更新的版本中都可以使用。测试时可以执行并发连接数,并指定SQL 语句(可以在命令行上执行,也可以把SQL 语句写入到参数文件中)。如果没有指定...转载 2019-06-05 16:08:59 · 5839 阅读 · 0 评论 -
详记一次MySQL千万级大表优化过程!
来自:知乎,作者:互联网编程链接:https://www.zhihu.com/question/19719997/answer/549041957问题概述使用阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据量近2000万,保留最近一年的数据量达到4000万,查询速度极慢,日常卡死。严重影响业务。问题前提:老系统,当时设计系统的人...转载 2019-05-23 17:06:43 · 477 阅读 · 0 评论 -
记住:永远不要在 MySQL 中使用 UTF-8
最近我遇到了一个 bug,我试着通过 Rails 在以“utf8”编码的 MariaDB 中保存一个 UTF-8 字符串,然后出现了一个离奇的错误:Incorrectstringvalue:‘\xF0\x9F\x98\x83<…’forcolumn‘summary’atrow1我用的是 UTF-8 编码的客户端,服务器也是 UTF-8 编码的,数据库也是,就连...转载 2019-04-24 16:59:06 · 278 阅读 · 1 评论 -
MySQL中使用LIMIT进行分页的方法
一:分页需求:客户端通过传递start(页码),pageSize(每页显示的条数)两个参数去分页查询数据库表中的数据,那我们知道MySql数据库提供了分页的函数limit m,n,但是该函数的用法和我们的需求不一样,所以就需要我们根据实际情况去改写适合我们自己的分页语句,具体的分析如下:比如:查询第1条到第10条的数据的sql是:select * from table limit 0,...转载 2019-04-24 10:55:21 · 720 阅读 · 0 评论 -
MySQL 到底是怎么解决幻读的?
作者:LastSunhttps://www.cnblogs.com/wdy1184/p/10655180.html一、什么是幻读在一次事务里面,多次查询之后,结果集的个数不一致的情况叫做幻读。而多出来或者少的哪一行被叫做幻行。二、为什么要解决幻读在高并发数据库系统中,需要保证事务与事务之间的隔离性,还有事务本身的一致性。三、MySQL 是如何解决幻读的如果你看到...转载 2019-06-03 17:33:04 · 2655 阅读 · 1 评论 -
好文推荐 | MySQL binlog应用场景与原理深度剖析
作者:田守枝来自:田守枝的博客(公众号)本文深入介绍Mysql Binlog的应用场景,以及如何与MQ、elasticsearch、redis等组件的保持数据最终一致。最后通过案例深入分析binlog中几乎所有event是如何产生的,作用是什么。1 基于binlog的主从复制Mysql 5.0以后,支持通过binary log(二进制日志)以支持主从复制。复制允许将来自一个...转载 2019-06-10 16:31:48 · 749 阅读 · 0 评论 -
JDBC与mysql同为CST时区导致数据库时间和客户端时间差13或者14小时
摘要线上排查问题时候碰到一个奇怪的问题,代码中读取一天的记录。代码中设置时间是从零点到夜里二十四点。但是读取出来的记录的开始是既然是从13点开始的。然后看了JDBC的源码发现主要原因是Mysql的CST时间与Java中CST时间是不一样的,下面给出问题的排查过程。情景再现1、代码中用的java.util.Date类型、换成TimeStamp类型也没有解决问题2、数据库中用的Time...转载 2019-06-04 21:31:10 · 6340 阅读 · 1 评论