![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MySQL
文章平均质量分 74
哦嗨哟思密达
欲戴皇冠,必承其重!
展开
-
MySQL数据库分区技术
MySQL数据库分区技术原创 2023-11-08 11:38:04 · 128 阅读 · 0 评论 -
MySQL数据库的各种锁介绍以及它们之间的关系
全网最细,让你对MySQL各种锁的作用和关系一目了然原创 2023-11-08 11:28:29 · 297 阅读 · 0 评论 -
MySQL数据库 Java实体类 java.util.Date属性 时间保存
Java 通过java.util.Date属性保存时间入库mysql原创 2023-01-16 09:23:27 · 550 阅读 · 1 评论 -
explain字段以及MySQL优化
如何查看explain语句的执行结果执行以下语句:explain 你的SQL语句分析explain的执行结果0. id具体内容参考此链接:Explain字段解释——id1. select_type含义:指明查询的类型,主要用于区别普通查询、联合查询、子查询等复杂查询。如下:2. table含义:这一行的数据是关于那张表。3. type显示查询使用了哪种访问类型。结果值从最好到最坏依次是:system>const>eq_ref>ref>range>in原创 2021-10-19 22:17:35 · 133 阅读 · 0 评论 -
SQL语句编写经典50题
参考链接:面试 SQL整理 常见的SQL面试题:经典50题-- 模糊查询:查询学生中名字带“猴”的名字SELECT * FROM student WHERE 姓名 LIKE '%猴%'-- 汇总统计分析========================================-- 汇总统计分析:查询课程编号为“0002”的总成绩SELECT SUM(成绩) FROM score WHERE 课程号='0002'-- 汇总统计分析:查询选了课程的学生人数SELECT COUNT(DIS转载 2021-10-17 23:06:29 · 600 阅读 · 0 评论 -
MySQL理论知识面试题
MySQL中的varchar和char有什么区别?char是一个定长字段,比如char(10),无论实际存储了多少内容,该字段都占用10个字符。varchar是变长字段,比如varchar(10)表示申请了最大长度为10的空间,但占用的空间为实际字符长度+1.varchar(10)和int(10)代表什么含义?varchar是变长字段,上面已解释,而int(10)只是代表了展示的长度,不足10位用0填充,也就是说int(1)和int(10)所能存储的数字大小以及占用的空间都是相同的,只是在展..原创 2021-09-19 09:32:51 · 935 阅读 · 0 评论 -
MySQL中varchar最大长度是多少?
MySQL中varchar最大长度是多少?转载 2021-09-16 18:26:59 · 124 阅读 · 0 评论 -
MySQL15-只查一行数据却执行很慢
1、先编写表结构和数据mysql> CREATE TABLE `t` ( `id` int(11) NOT NULL, `c` int(11) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;delimiter ;;create procedure idata()begin declare i int; set i=1; while(i<=100000)do insert into t values(i,原创 2021-08-29 21:49:26 · 396 阅读 · 0 评论 -
MySQL14-为什么SQL语句逻辑相同,性能却差异巨大?
案例一:条件字段函数操作不要对字段进行函数计算操作。比如下面的就不行select * from tradelog where id + 1 = 10000;select count(*) from tradelog where month(t_modified)=7;为什么不能对条件字段做计算?–>无法用到B+树的快速定位能力因为如果对字段做了函数计算, 就用不上索引了, 这是MySQL的规定。而我们上面的id和t_modified都有索引,但是显然我们都对它们进行了操作,这样就无法用到B原创 2021-08-29 21:02:03 · 237 阅读 · 0 评论 -
MySQL13-order by是怎么工作的
假设部分表定义:CREATE TABLE `t` ( `id` int(11) NOT NULL, `city` varchar(16) NOT NULL, `name` varchar(16) NOT NULL, `age` int(11) NOT NULL, `addr` varchar(128) DEFAULT NULL, PRIMARY KEY (`id`), KEY `city` (`city`)) ENGINE=InnoDB;假设按照下面的sql查询并排序。原创 2021-08-25 17:21:27 · 74 阅读 · 0 评论 -
MySQL12-count(x)这么慢,我该怎么办
在不同的MySQL引擎中, count(*)有不同的实现方式。MyISAM引擎把一个表的总行数存在了磁盘上, 因此执行count()的时候会直接返回这个数,*效率很高;如果加了where 条件的话, MyISAM表也是不能返回得这么快的。而InnoDB引擎就麻烦了, 它执行count(*)的时候, 需要把数据一行一行地从引擎里面读出来, 然后累积计数。为什么InnoDB不跟MyISAM一样, 也把数字存起来呢?这是因为即使是在同一个时刻的多个查询, 由于多版本并发控制(MVCC) 的原因, In原创 2021-08-25 09:22:21 · 126 阅读 · 0 评论 -
MySQL11- 为什么表数据删掉一半,表文件大小不变?
为何删除数据文件大小不变解答一个InnoDB表包含两部分, 即: 表结构定义和数据。 在MySQL 8.0版本以前, 表结构是存在以.frm为后缀的文件里。 而MySQL 8.0版本, 则已经允许把表结构定义放在系统数据表中了。接下来, 先说明为什么简单地删除表数据达不到表空间回收的效果, 然后再和你介绍正确回收空间的方法。表数据既可以存在共享表空间里, 也可以是单独的文件。 这个行为是由参数innodb_file_per_table控制的:这个参数设置为OFF表示的是, 表的数据放在系统共享表空原创 2021-08-24 23:29:00 · 258 阅读 · 0 评论 -
MySQL10-脏页的触发及控制策略
当内存数据页跟磁盘数据页内容不一致的时候, 我们称这个内存页为**“脏页”。**内存数据写入到磁盘后, 内存和磁盘上的数据页的内容就一致了, 称为**“干净页”。**MySQL执行期间突然慢一下,且持续时间很短,可能在刷脏页,就是将内存中的数据保存在磁盘中。什么时候会触发脏页?1 innodb的redo log写满了,这时候系统会停止所有更新。把checkpoint 往前推进。2 buffer pool内存不足,此时需要淘汰一些数据页,有可能会淘汰脏页,就要先把脏页刷到磁盘刷脏页一定会写盘,就原创 2021-08-24 17:24:08 · 196 阅读 · 0 评论 -
MySQL09-如何给字符串加索引-前缀索引
现在, 几乎所有的系统都支持邮箱登录, 如何在邮箱这样的字段上建立合理的索引, 是我们今天要讨论的问题。假设, 你现在维护一个支持邮箱登录的系统, 用户表是这么定义的mysql> create table SUser(ID bigint unsigned primary key,email varchar(64),...)engine=innodb由于要使用邮箱登录, 所以业务代码中一定会出现类似于这样的语句:mysql> select f1, f2 from SUser wh原创 2021-08-24 16:41:26 · 1023 阅读 · 0 评论 -
MySQL08-为什么MySQL有时候会选错索引
前面我们介绍过索引, 你已经知道了在MySQL中一张表其实是可以支持多个索引的。 但是, 你写SQL语句的时候, 并没有主动指定使用哪个索引。 也就是说, 使用哪个索引是由MySQL来确定的。那什么时候MySQL选错了索引, 而导致执行速度变得很慢?在此之前,我们先看一个例子例子我们先建一个简单的表, 表里有a、 b两个字段, 并分别建上索引:下面的三条SQL语句, 就是这个实验过程。CREATE TABLE `t` (`id` int(11) NOT NULL,`a` int(11) DE原创 2021-08-24 15:56:28 · 127 阅读 · 0 评论 -
MySQL07-普通索引和唯一索引应如何选择
普通索引普通索引,就是在创建索引时,不附加任何限制条件(唯一、非空等限制)。该类型的索引可以创建在任何数据类型的字段上。唯一索引谓唯一索引,就是在创建索引时,限制索引的值必须是唯一的。通过该类型的索引可以更快速地查询某条记录。...原创 2021-08-24 12:18:13 · 145 阅读 · 0 评论 -
MySQL06-数据多版本&快照&事务更新逻辑
在学习之前,我们先看一个行锁的例子注意:begin/start transaction 命令,在执行到第一个SQL语句时事务才真正启动。start transaction withconsistent snapshot 命令马上启动事务。MySQL的事务提交方式默认都是autocommit=1。事务C没有显式地使用begin/commit, 表示这个update语句本身就是一个事务,语句完成的时候会自动提交。那么你认为事务A、B查询到的k的值是多少呢? A是1,B是3,如果你知道,那么就可以跳过这部分原创 2021-08-23 13:51:53 · 323 阅读 · 0 评论 -
MySQL05-全局锁&表锁&行锁
数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构本文主要介绍的是碰到锁时的现象和其背后的原理全局锁顾名思义,全局锁就是对整个数据库实例加锁。MySQL提供了一个加全局锁的方法,命令是:Flush tables with read lock (FTWRL)当我们需要让整个数据库处于只读状态的时候,可以使用这个命令,而当数据库出现异常的时候会自动解锁,之后其他线程的以下语句会被阻塞:数据更原创 2021-08-22 17:18:40 · 107 阅读 · 0 评论 -
MySQL04-彻底搞懂索引
前言:在日常工作中会经常接触到, 比如某一个SQL查询比较慢,分析完原因之后, 你可能就会说“给某个字段加个索引吧”之类的解决方案。 但到底什么是索引,索引又是如何工作的呢?本文就此展开探索!索引究竟是什么?一本500页的书, 如果你想快速找到其中的某一个知识点, 在不借助目录的情况下, 那我估计你可得找一会儿。 同样, 对于数据库的表而言, 就像书的目录一样, 索引其实就是“书的目录”。它的出现其实就是为了提高数据查询的效率。索引的常见模型(数据结构)索引的出现是为了提高查询效率, 但是实现索引原创 2021-08-21 23:53:23 · 80 阅读 · 0 评论 -
MySQL03-事务隔离级别与实现
隔离性是事务ACID中的I事务的隔离级别事务隔离级别脏读不可重复读幻读读未提交(read-uncommitted)是是是读提交(read-committed)否是是可重复读(repeatable-read)否否是串行化(serializable)否否否事务的隔离级别含义读未提交:是指 一个事务还没提交时, 它做的变更就能被别的事务看到。读提交:是指 一个事务提交之后, 它做的变更才会被其他事务看到。可重复读:是指一个事务执行原创 2021-08-21 22:39:14 · 58 阅读 · 0 评论 -
MySQL02-日志系统: 一条SQL更新语句是如何执行的?
一条SQL更新语句是如何执行的?更新语句:update T set c=c+1 where ID=2;SQL更新语句的执行过程一条查询语句的执行过程一般是经过连接器、 分析器、 优化器、 执行器等功能模块, 最后到达存储引擎。同样的,更新语句也是走完一套流程。流程: 分析器会通过词法和语法解析知道这是一条更新语句。 优化器决定要使用ID这个索引。然后, 执行器负责具体执行, 找到这一行, 然后更新。与查询流程不一样的是, 更新流程还涉及两个重要的日志模块, 它们正是我们今天要讨论的主角: re原创 2021-08-21 21:32:35 · 55 阅读 · 0 评论 -
MySQL01--一条SQL查询语句是如何执行的?
此笔记是我学习极客时间课程-MySQL45讲笔记,若有侵权请联系,马上删除!1 一条SQL查询语句是如何执行的?本章探讨的SQL语句是select * from T where ID=10;1.1 MySQL的基本架构示意图从MySQL的基本架构示意图中,我们可以清楚看到SQL语句在MySQL的各个功能模块的执行过程大体来说,MySQL可以分为Server层和存储引擎层;Server层Server层涵盖了MySQL的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数和原创 2021-08-21 17:53:22 · 72 阅读 · 0 评论