数据库
文章平均质量分 84
马小屑
这个作者很懒,什么都没留下…
展开
-
颜值爆表!Redis官方可视化工具来啦,功能真心强大!
RedisInsight是Redis官方出品的可视化管理工具,可用于设计、开发、优化你的Redis应用。支持深色和浅色两种主题,界面非常炫酷!可支持String、Hash、Set、List、JSON等多种数据类型的管理,同时支持远程使用CLI功能,功能非常强大!下面是RedisInsight的一张使用效果图,颜值不错!Redis经过多年发展,早已不仅仅是一个内存数据库了。有了RedisMod的支持,Redis的功能将变得非常强大。RediSearch:一个功能齐全的搜索引擎;...原创 2022-08-06 10:22:22 · 358 阅读 · 0 评论 -
解决Redis、MySQL缓存双写不一致问题
redis、mysql双写缓存不一致:但是在更新缓存方面,对于又或者是先目前没有一篇全面的博客,对这几种方案进行解析。于是博主战战兢兢,顶着被大家喷的风险,写了这篇文章。原创 2022-08-06 10:02:00 · 664 阅读 · 1 评论 -
发现一款好用到爆的数据库工具,被惊艳到了
在面板中,左上部分列出了已经建立的数据库连接,点击各项,右侧会展示当前连接的配置信息,General面板中,可以配置数据库连接的信息,如主机、用户名、密码等,不同数据库配置信息不完全相同,填入数据库URL,注意,URL后有个选项,可以选择直接填入url,那么就不需要单独填主机名、端口等信息了。需要将当前主题保存一下,点击save as,起个名,选择重命名后的主题就能修改了,这里我选择习惯的Conurier New字体,大小为14号,点击右下角的apply,点击OK。...原创 2022-08-06 09:21:40 · 1090 阅读 · 0 评论 -
我劝!这位年轻人不讲MVCC,耗子尾汁!
上一篇文章中白日梦有和大家介绍过 undo log 默认存放在共享表空间文件中,同在MySQL5.6 MySQL5.7中也允许你将undo log拿到单独的表空间中去,但是不论怎样,undo log总会以真实存在的文件的形式存在于磁盘上,当然了MySQL5.7的undo truncate机制 结合purge线程可以将不需要的undo log清除掉,为undo log文件瘦身,但是在这个版本之前的MySQL的undo log的体量会不断的增大,再加上大量的长事务,很可能会将磁盘打爆。...原创 2022-08-05 16:25:35 · 137 阅读 · 0 评论 -
什么情况会导致 MySQL 索引失效?
联合索引不满足最左匹配原则。模糊查询最前面的为不确定匹配字符。索引列参与了运算。索引列使用了函数。索引列存在类型转换。索引列使用 is not null 查询。原创 2022-08-05 13:55:53 · 2233 阅读 · 1 评论 -
了解MySQL数据页吗?说说什么是页分裂吧!
在MySQL的设定中,同一个表空间内的一组连续的数据页为一个extent(区),默认区的大小为1MB,页的大小为16KB。约定好了数据的组织方式,那MySQL的作用不就是:按照约定数据规则将数据文件中的数据加载进内存,然后展示给用户看,以及提供其他能力吗?而你想得到的id = xxx的数据,就是这个数据页众多行中的一行。在InnoDB存储引擎中,数据页是InnoDB磁盘管理的最小的数据单位,数据页的默认大小为16KB。然后随着你将数据写入。就导致后一个数据页中的所有行并不一定比前一个数据页中的行的id大。.原创 2022-08-05 13:50:27 · 683 阅读 · 0 评论 -
面试官:了解 MySQL的数据行吗?行溢出机制呢?谈谈看!
你品一品蓝色的话,让一个数据页中可以存放更多的数据行是一个多么激动人心的事,MySQL以数据页为单位从磁盘中读数据,如果能做到让一个数据页中有更多的行,那岂不是单行使用的数据页空间变少了,且整体的效率直线飙升?在MySQL设定中,当varchar列长度达到768byte后,会将该列的前768byte当作prefix存放在行中,多出来的数据溢出存放到溢出页中,然后通过一个偏移量指针将两者关联起来,这就是行溢出机制。那就意味着一个数据页中能存储越多的数据行,MySQL整体的进行的IO次数就越少,性能就越快。..原创 2022-08-05 13:12:13 · 235 阅读 · 0 评论 -
大家常说的表空间到底是什么?究竟什么又是数据表呢?
关于这个共享表空间,直观上看,如果这个表空间能为multiple tables.存储数据,那么它就可以被称为共享表空间,所以你可以认为系统表空间是共享表空间。这里的user其实就是数据表。大家不用纠结为啥它叫表空间、为啥表空间会对应着磁盘上的物理文件,因为MySQL就是这样设计、设定的。共享表空间的体量依然会不断的增长,并且你即使你不断的使用undo进行rollback,共享表空间大小也不会缩减就好了。这个ibdata1文件是系统表空间,也是默认的表空间,也是默认的表空间物理文件,也是传说中的共享表空间。.原创 2022-08-05 13:09:29 · 739 阅读 · 0 评论 -
LSN、Checkpoint?MySQL的崩溃恢复是怎么做的?
那MYSQL重启,由于未来得及commit,脏数据页没有刷新到磁盘上,所以重启时得到的数据时不准确的,但是,实际上MySQL会根据方才的redo log重做。因此内存中的缓存页磁盘成为磁盘上的数据页,也就是说磁盘上的数据页的LSN变成300。说明数据页中缺失了一部分数据。随着MySQL的运行,Buffer Pool中的数据页会被修改成脏数据页,当你开启事物进行一系列的操作时MySQL会为你不停的记录一堆日志,拿redo log来说,rodo log也是需要往先往内存中写,再以块的形式刷新回磁盘。...原创 2022-08-05 13:04:39 · 299 阅读 · 0 评论 -
一看就懂的:MySQL的Double Write
由断电引发的问题不一会 - 来电了Double write工作流程恢复的过程配置参数Double write并不一定是必须的疑问二、由断电引发的问题今天为大家介绍一个新的名词:double write。相信你还记得,我之前有写笔记跟大家分享过,在MySQL组织数据的基本单位是存在于磁盘上的数据页。数据页被读取到内存(Buffer Pool)中后被称为缓存页。默认情况下每个数据页的大小是16kb,数据页中存储的就是一行行真实的记录,也叫做数据行。...原创 2022-08-05 09:46:57 · 1284 阅读 · 1 评论 -
对NotNull字段插入Null值有啥现象?
从上面的实验来看,相信你已经看出了现象:无论是否开启了严格模式,MySQL都不允许往not null字段插入null值,它不会因为你插入null,而将null转成该数据类型的0值。将其加入到sql_model之后,MySQL将不允许你将诸如 0000-10-10、2020-00-10、2020-10-00等年份、月份、日期为零的值插入到Date列中。为了更直观的看出sql mode 对sql执行结果的影响,推荐你看一下下面的这两个小Demo,都不复杂。研发的同学了解就好了,不用刻意记住它,了解就是加分项!.原创 2022-08-05 09:05:57 · 712 阅读 · 0 评论 -
一通骚操作,我把SQL执行效率提高了10000000倍!
mysql嵌套子查询效率确实比较低可以将其优化成连接查询连接表时,可以先用where条件对表进行过滤,然后做表连接(虽然mysql会对连表语句做优化)建立合适的索引,必要时建立多列联合索引学会分析sql执行计划,mysql会对sql进行优化,所以分析执行计划很重要。......原创 2022-08-03 15:09:21 · 269 阅读 · 0 评论 -
无内鬼,来点干货!SQL优化和诊断
我们知道Mysql有一个最左匹配原则,那么如果我的索引建的是age,name,那我以name,age这样的顺序去查询能否使用到索引呢?说明:MySQL 并不是跳过 offset 行,而是取 offset+N 行,然后返回放弃前 offset 行,返回 N 行,那当 offset 特别大的时候,效率就非常的低下,要么控制返回的总页数,要么对超过特定阈值的页数进行 SQL 改写。之前回答一些面试问题的时候,对某一个点的理解出现了偏差,即我认为只要查询的列有索引则一定会使用索引去Push数据。...原创 2022-08-03 14:39:40 · 139 阅读 · 0 评论 -
上亿数据怎么玩深度分页?兼容MySQL + ES + MongoDB
同样的,随着页码的增大,skip 跳过的条目也会随之变大,而这个操作是通过 cursor 的迭代器来实现的,对于cpu的消耗会非常明显,当页码非常大时且频繁时,必然爆炸。这种滚动式API进行深度跳页查询,也是一样需要每次滚动几千条,可能一共需要滚动上百万,千万条数据,就为了最后的20条数据,效率可想而知。不是典型的数据库,它是一个搜索引擎,如果在筛选条件下没有搜索出想要的数据,继续深度分页也不会找到想要的数据,退一步讲,假如我们把。数据库还好,本身就是专业的数据库,处理的不好,最多就是慢,但如果涉及到。..原创 2022-08-03 14:37:52 · 209 阅读 · 0 评论 -
MySQL中的基数是啥?
大白话讲:基数指的就是MySQL表中某一列的不同值的数量。如果这一列是唯一索引,那基数 == 行数。如果这一列是sex,枚举类型只有男女,那它是基数就是2。Cardinality越高,列就越有成为索引的价值。通过下面的方式可以看到表中各列的基数。比如这个经典的例子:有一列为sex,那对于sex列中存储的值来说 非男即女,它的基数最大就是2。那也就完全没有必要为sex建立索引。因为,为了提升你基于sex的查询速度,MySQL会为你选择的这个新索引创建一棵全新的B+Tree。...原创 2022-08-03 14:26:28 · 661 阅读 · 0 评论 -
简介undo log、truncate、以及undo log如何帮你回滚事物?
truncate意为:截断其实结合 truncate table sql,就能更好的理解这个概念。当你不需要某个表中的数据时,你可以执行truncate sql将表中的数据清空掉。同样的undo log的truncate机制本质上就是为undo log 表空间文件瘦身,将不需要的undo log从undo log 表空间文件中清理掉。在MySQL 5.6(包括5.6)之前undo tablespace里面的undo数据文件是无法收缩的。...原创 2022-08-03 12:02:08 · 488 阅读 · 3 评论 -
【干货】分库分表最佳实践
MySQL单表(innoDB)可以存储10亿级数据,只是这时候性能比较差,业界公认MySQL单表容量在1KW以下是最佳状态,因为这时它的BTREE索引树高在3~5之间。1.单表行数超过500万行或者单表容量超过2GB,才推荐进行分库分表;如果预计三年后的数据量根本达不到这个级别,请不要在创建表时就分库分表。2.实际情况受mysql机器配置等多方面影响,可能数据量很大但性能依旧不错,但考虑后续发展一定要进行分库分表考虑。如何高效的使用分库分表,核心是做到尽量的路由到最少的表,最好是只路由到一个表里面。...原创 2022-08-02 11:47:41 · 546 阅读 · 0 评论 -
你我都会遇到的需求:如何导出MySQL中的数据~ 简单!实用!
使用这个参数后会开启mysql_use_result模式,MySQL每读到一行数据,就会立刻将这行数据返回给客户端,虽然交互的次数多了点,但是直接解决掉客户端内存消耗问题。如果你的SQL要捞出的数据量动辄几十几百G,或者TB级别,且依然使用上面的方式拉数据的话,就极有可能打爆内存。第二种方式如下,在登录MySQL时指定好用哪个数据库和要执行的SQL语句,并将SQL的执行结果一股脑重定向到你指定的文件中。tee的功能是把你与MySQL-Server之间的交互记录都记录到你指定的文件中去。...原创 2022-08-02 10:54:33 · 152 阅读 · 0 评论 -
嗨!不来看一下如何骚气十足的登陆MySQL嘛?
mysql.sock应该是mysql的主机和客户机在同一host(物理服务器)上的时候,使用unixdomainsocket做为通讯协议的载体,它比tcp快。如果你没有配置环境变量,系统就不能直接识别mysql命令,需要你进入到mysql安装目录下的bin文件下,找到mysql命令,然后执行登陆的动作。在mysql中用户的信息会存放在mysql数据库下的user表中可以像下面这样查看到所有用户信息。看起来我们需要了解一下mysql.sock的作用,因为通过它我们可以实现mysql的本地登陆。...原创 2022-08-02 10:21:46 · 92 阅读 · 0 评论 -
删库后!除了跑路还能干什么?
Hi,欢迎订阅白日梦的MySQL专题!这篇文章我们一起闲聊,如果你不小心把MySQL中的数据删了,除了跑路还能干啥?看完本篇你将了解常见的数据库备份方式、mysqldump实战、一条binlog长啥样、什么是gtid?什么是binlog位点?mysqlbinlog数据恢复实战。GTID(globaltranscationidentifier)它是MySQL5.6版本中添加进来的新特性,使用GTID可以唯一的标识一个事物。我用大白话描述一下GTID常见的作用1.写undolog。...原创 2022-07-31 15:51:57 · 93 阅读 · 0 评论 -
阿里一面,给了几条SQL,问需要执行几次树搜索操作?
有位朋友去阿里面试,他说面试官给了几条查询SQL,问需要执行几次树搜索操作?我朋友当时是有点懵的,后来冷静思考,才发现就是考索引的几个基础知识点~~本文我们分九个索引知识点,一起来探讨一下。如果有不正确的话,欢迎指出哈,一起学习~面试官考点之索引是什么?面试官考点之索引类型面试官考点之为什么选择B+树作索引结构面试官考点之一次索引搜索过程面试官考点之覆盖索引面试官考点之索引失效场景面试官考点之最左前缀面试官考点之索引下推面试官考点之大表添加索引复制代码https。...原创 2022-07-28 13:47:30 · 69 阅读 · 0 评论 -
MySQL:当你CRUD时BufferPool中发生了什么?十张图就能说清楚
你知道的,MySQL对数据的增删改查都是内存中完成的,这块内存就是Buffer Pool。你可以像下面这样查看下你的MySQL的Buffer的Buffer Pool的默认大小上图中的0.125单位为GB,转换成MB就是 1024* 1/8 = 128MB总结来说,就是MySQL启动后就会为我们初始化好这块Buffer Pool。如下图:你可以看着上图,然后读下面这段话:MySQL以数据页为单位,从磁盘中读取数据。数据页被读取到内存中,所谓的内存其实就是Buffer Pool。Buffer Pool中维护的数原创 2022-07-28 13:34:26 · 82 阅读 · 0 评论 -
实战!聊聊如何解决MySQL深分页问题
我们日常做分页需求时,一般会用limit实现,但是当偏移量特别大的时候,查询效率就变得低下。本文将分四个方案,讨论如何优化MySQL百万数据的深分页问题,并附上最近优化生产慢SQL的实战案例。...原创 2022-07-28 11:56:12 · 874 阅读 · 0 评论 -
分享一些你代码更好的小建议,流畅编码提搞效率
看过很多思考不够深入的代码,因此写一下总结吧,让你代码更好的小建议。希望大家日常写代码多点思考,多点总结,加油!原创 2022-07-28 11:24:11 · 184 阅读 · 0 评论 -
后端程序员必备:书写高质量SQL的30条建议
本文将结合实例demo,阐述30条有关于优化SQL的建议,多数是实际开发中总结出来的,希望对大家有帮助。原创 2022-07-28 09:20:47 · 129 阅读 · 0 评论 -
数据库多表查询 联合查询 增删改查
=(=,>,=,原创 2022-07-27 14:43:50 · 2809 阅读 · 0 评论 -
数据库持久化+JDBC数据库连接
SQL注入是利用某些系统没有对用户输入的数据进行充分的检查,而在用户输入数据中注入非法的SQL语句段或命令,如下,从而利用系统的SQL引擎完成恶意行为的做法。在程序中不需要直接去访问实现了Driver接口的类,而是由**驱动程序管理器类(java.sql.DriverManager)**去调用这些Driver实现。子名称可以依不同的子协议而变化,用子名称的目的是为了定位数据库提供足够的信息。//将com.mysql.jdbc包下的Driver类的字节码文件从本地磁盘加载到方法区中。...原创 2022-07-27 14:22:34 · 491 阅读 · 0 评论 -
数据库使用psql及jdbc进行远程连接,不定时自动断开的解决办法
系统平台Linuxx86-64RedHatEnterpriseLinux7,Linuxx86-64RedHatEnterpriseLinux6,银河麒麟U系(CPU飞腾)4版本4.5。原创 2022-07-27 11:12:09 · 825 阅读 · 0 评论 -
数据库全量SQL分析与审计系统性能优化之旅
SCA概念出现其实很久了。简单来说,就是针对现有的软件系统生成粒度非常细的SBOM(SoftwareBillofMaterials软件物料单)清单,然后通过⻛险数据去匹配有没有存在⻛险组件被引用。目前,市面上比较出色的商业产品包括Synopsys的Blackduck、Snyk的SCA、HP的FortifySCA等,开源产品包括国内悬镜的OpenSCA。以上是我们在整个SCA能力建设过程中积累的一些想法和实践。httpshttpshttpshttps。...转载 2022-07-22 15:20:50 · 138 阅读 · 0 评论