
MySQL
MySQL数据库
住手丶让我来
我是革命一块砖,哪里需要哪里搬!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
最全的select加锁分析(Mysql)
《史上最全的select加锁分析(Mysql)》转载 2020-12-23 15:17:38 · 538 阅读 · 0 评论 -
如何保障MySQL和redis缓存的一致性
一、问题分析 众所周知,数据库是把数据存储在磁盘上,访问时需要进行IO操作,在请求量小的情况下,耗时还比较低。但随着数据量的增大,访问量的集中,整个数据库负担加重,响应就会变慢,请求延时上升。进而导致用户侧的等待时间变长,很大程度上影响了用户体验。 为了解决这一问题,在整个请求链路上就引入了缓存的策略,将数据库中的数据copy一份到redis缓存(毕竟可是号称单机抗10w qps)。由于redis的数据是直接存在原创 2020-09-29 19:14:20 · 527 阅读 · 1 评论 -
基于MySQL实现的分布式锁
一、前言 在单机时代,虽然不需要分布式锁,但也面临过类似的问题,只不过在单机的情况下,如果有多个线程要同时访问某个共享资源的时候,我们可以采用线程间加锁的机制,即当某个线程获取到这个资源后,就立即对这个资源进行加锁,当使用完资源之后,再解锁,其它线程就可以接着使用了。例如,在JAVA中,甚至专门提供了一些处理锁机制的一些API(synchronize/Lock等)。 但是到了分布式系统的时代,这种线程之间的锁机制原创 2020-08-20 15:20:12 · 1408 阅读 · 1 评论 -
JDBC的连接步骤
JDBC的连接步骤1.JDBC所需的四个参数user:用户名;password:密码;URL:定义了连接数据库时的协议、子协议、数据源标识。(书写形式:协议:子协议:数据源标识);(1). 协议:在JDBC中总是以jdbc开始;(2). 子协议:是桥连接的驱动程序或是数据库管理系统名称;(3). 数据源标识:标记找到数据库来源的地址与连接端口;driverClass连接数据库所需的驱动。2.加载JDBC驱动程序 在连接数据库之前,首先要加原创 2020-07-22 10:47:26 · 611 阅读 · 0 评论 -
自增id用完怎么办?
一、前言 MySQL 里有很多自增的 id,每个自增 id 都是定义了初始值,然后不停地往上加步长。虽然自然数是没有上限的,但是在计算机里,只要定义了表示这个数的字节长度,那它就有上限。比如,无符号整型 (unsigned int) 是 4 个字节,上限就是 232-1。 既然自增 id 有上限,就有可...原创 2020-08-29 10:40:24 · 741 阅读 · 0 评论 -
“order by”是怎么工作的?
一、前言 在你开发应用的时候,一定会经常碰到需要根据指定的字段排序来显示结果的需求。还是以我们前面举例用过的市民表为例,假设你要查询城市是“杭州”的所有人名字,并且按照姓名排序返回前 1000 个人的姓名、年龄。 假设这个表的部分定义是这样的:CREATE TABLE `t` ( `id` int...原创 2020-08-29 14:35:06 · 148 阅读 · 0 评论 -
MySQL为什么有时候会选错索引?
一、前言 前面我们介绍过索引,你已经知道了在 MySQL 中一张表其实是可以支持多个索引的。但是,你写 SQL 语句的时候,并没有主动指定使用哪个索引。也就是说,使用哪个索引是由 MySQL 来确定的。 不知道你有没有碰到过这种情况,一条本来可以执行得很快的语句,却由于 MySQL 选错了索引,而导致执...原创 2020-08-29 15:06:20 · 196 阅读 · 0 评论 -
事务到底是隔离的还是不隔离的?
一、前言 我在前面文章和你讲事务隔离级别的时候提到过,如果是可重复读隔离级别,事务 T 启动的时候会创建一个视图 read-view,之后事务 T 执行期间,即使有其他事务修改了数据,事务 T 看到的仍然跟在启动时看到的一样。也就是说,一个在可重复读隔离级别下执行的事务,好像与世无争,不受外界影响。 但...原创 2020-08-29 21:56:02 · 211 阅读 · 0 评论 -
行锁功过:怎么减少行锁对性能的影响?
一、前言 在上一篇文章中,我跟你介绍了 MySQL 的全局锁和表级锁,今天我们就来讲讲 MySQL 的行锁。 MySQL 的行锁是在引擎层由各个引擎自己实现的。但并不是所有的引擎都支持行锁,比如 MyISAM 引擎就不支持行锁。不支持行锁意味着并发控制只能使用表锁,对于这种引擎的表,同一张表上任何时刻只...原创 2020-03-29 09:58:36 · 91 阅读 · 0 评论 -
深入浅出索引(下)
一、前言 在上一篇文章中,我和你介绍了 InnoDB 索引的数据结构模型,今天我们再继续聊聊跟 MySQL 索引有关的概念。二、在开始这篇文章之前,我们先来看一下这个问题? 在下面这个表 T 中,如果我执行 select * from T where k between 3 and 5,需要执行几次树...转载 2020-08-30 11:37:11 · 144 阅读 · 0 评论 -
深入浅出索引(上)
一、前言 提到数据库索引,我想你并不陌生,在日常工作中会经常接触到。比如某一个 SQL 查询比较慢,分析完原因之后,你可能就会说“给某个字段加个索引吧”之类的解决方案。但到底什么是索引,索引又是如何工作的呢?今天就让我们一起来聊聊这个话题吧。 一句话简单来说,索引的出现其实就是为了提高数据查询的效率,就...原创 2020-08-30 11:16:57 · 187 阅读 · 1 评论 -
事务隔离:为什么你改了我还看不见?
一、前言 提到事务,你肯定不陌生,和数据库打交道的时候,我们总是会用到事务。最经典的例子就是转账,你要给朋友小王转 100 块钱,而此时你的银行卡只有 100 块钱。 转账过程具体到程序里会有一系列的操作,比如查询余额、做加减法、更新余额等,这些操作必须保证是一体的,不然等程序查完之后,还没做减法之前,...原创 2020-03-28 12:09:32 · 86 阅读 · 0 评论 -
一条SQL更新语句是如何执行的?
一、前言 前面我们系统了解了一个查询语句的执行流程,并介绍了执行过程中涉及的处理模块。相信你还记得,一条查询语句的执行过程一般是经过连接器、分析器、优化器、执行器等功能模块,最后到达存储引擎。 那么,一条更新语句的执行流程又是怎样的呢? 之前你可能经常听 ...原创 2020-08-30 09:08:23 · 160 阅读 · 0 评论 -
一条SQL查询语句是如何执行的?
一、前言 我们经常说,看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题。同样,对于 MySQL 的学习也是这样。平时我们使用数据库,看到的通常都是一个整体。比如,你有个最简单的表,表里只有一个 ID 字段,在执行下面这个查询语句时:mysql> select * from T where ID=10;&...原创 2020-08-30 10:42:58 · 181 阅读 · 0 评论 -
为什么B+树适合作为索引的结构
一、前言 本文是在讲述什么样的数据结构适合作为索引,以及其适合作为索引的原因。而阅读本文需要对B树和B+树结构有稍微的理解。以及需要对磁盘操作知识有稍微的了解。 在MySQL中,主要有四种类型的索引,分别为:B-Tree索引,Hash索引,Fulltext索引和R-Tree索引,本文讲的是B-Tree索...原创 2020-02-29 10:52:27 · 347 阅读 · 0 评论 -
分库与分表带来的分布式困境与应对之策
一、前言 随着用户数的不断增加,以及数据量的不断增加,通过分库与分表的方式提高查询性能的同时,带来了一系列分布式困境。二、数据迁移与扩容问题 水平分表策略归纳总结为随机分表和连续分表两种情况。连续分表有可能存在数据热点的问题,有些表可能会被频繁地查询从而造成较大压力,热数据的表就成为了整个库的瓶颈,而...原创 2020-02-29 10:09:43 · 298 阅读 · 0 评论 -
一条SQL语句执行得很慢的原因有哪些?
一、前言 说实话,这个问题可以涉及到 MySQL 的很多核心知识,可以扯出一大堆,就像要考你计算机网络的知识时,问你“输入URL回车之后,究竟发生了什么”一样,看看你能说出多少了?二、分类讨论大多数情况是正常的,只是偶尔会出现很慢的情况。在数据量不变的情况下,这条SQL语句一直以来都执行的很慢。三、针对偶尔很慢的情况 &nbs...原创 2020-01-19 10:11:36 · 331 阅读 · 0 评论 -
MySQL性能优化规范建议
一、数据库命令规范所有数据库对象名称必须使用小写字母并用下划线分割。所有数据库对象名称禁止使用 MySQL 保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来)。数据库对象的命名要能做到见名识意,并且最后不要超过 32 个字符。临时库表必须以 tmp_为前缀并以日期为后缀,备份表必须以 bak_为前缀并以日期 (时间戳) 为后缀。所有存储相同数据的列名和列类型必须一致(一般...原创 2020-01-19 09:58:03 · 252 阅读 · 0 评论 -
MySQL基准测试
什么是基准测试? 基准测试(benchmark)是MySQL新手和专家都需要掌握的一项基本技能。简单地说, 基准测试是针对系统设计的一种压力测试。通常的目标是为了掌握系统的行为。但也有其他原因, 如重现某个系统状态, 或者是做新硬件的可靠性测试。本章将讨论MySQL和基千MySQL的应用的基准测试的重要性、策略和工具。我们将特别讨论一下sys...原创 2019-08-25 23:02:55 · 237 阅读 · 1 评论 -
MySQL的一些基础架构和概念
数据库产品中架构分为应用层、逻辑层、物理层。应用层:负责和客户端、用户进行交互,需要和不同的客户端和中间服务器进行交互,建立连接,记住连接的转台,响应他们的全球,发挥数据和控制信息(错误信息、状态码等)。逻辑层:负责具体的查询处理、事务管理、存储管理、回复管理,以及其他的附加功能。查询处理器负责查询的解析、执行。当接受到客户端到查询是,数据库就会分配一个线程来处理它。先由查询处理器(优化器)生...原创 2019-05-24 10:41:16 · 224 阅读 · 0 评论