
数据库
文章平均质量分 90
主要学习mysql
echoecho_tongtong
士别三日当刮目相看
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
“order by”是怎么工作的
在你开发应用的时候,一定会经常碰到需要根据指定的字段排序来显示结果的需求。还是以我们前面举例用过的市民表为例,假设你要查询城市是“杭州”的所有人名字,并且按照姓名排序返回前1000个人的姓名、年龄。这个语句看上去逻辑很清晰,但是你了解它的执行流程吗?今天,我就和你聊聊这个语句是怎么执行的,以及有什么参数会影响执行的行为。原创 2024-06-21 17:48:06 · 767 阅读 · 1 评论 -
MySql实战--count(*)这么慢,我该怎么办
在开发系统的时候,你可能经常需要计算一个表的行数,比如一个交易系统的所有变更记录总数。这时候你可能会想,一条select count(*) from t 语句不就解决了吗?但是,你会发现随着系统中记录数越来越多,这条语句执行得也会越来越慢。然后你可能就想了,MySQL怎么这么笨啊,记个总数,每次要查的时候直接读出来,不就好了吗。那么今天,我们就来聊聊count(*)语句到底是怎样实现的,以及MySQL为什么会这么实现。原创 2024-04-19 13:58:33 · 2636 阅读 · 0 评论 -
Mysql实战--为什么表数据删掉一半,表文件大小不变
经常会有同学来问我,我的数据库占用空间太大,我把一个最大的表删掉了一半的数据,怎么表文件的大小还是没变?那么今天,我就和你聊聊数据库表的空间回收,看看如何解决这个问题。这里,我们还是针对MySQL中应用最广泛的InnoDB引擎展开讨论。一个InnoDB表包含两部分,即:表结构定义和数据。在MySQL 8.0版本以前,表结构是存在以.frm为后缀的文件里。而MySQL 8.0版本,则已经允许把表结构定义放在系统数据表中了。因为表结构定义占用的空间很小,所以我们今天主要讨论的是表数据。原创 2024-04-01 09:54:17 · 1153 阅读 · 0 评论 -
MySql实战--为什么我的MySQL会“抖”一下
时的工作中,不知道你有没有遇到过这样的场景,一条SQL语句,正常执行的时候特别快,但是有时也不知道怎么回事,它就会变得特别慢,并且这样的场景很难复现,它不只随机,而且持续时间还很短。看上去,这就像是数据库“抖”了一下。今天,我们就一起来看一看这是什么原因。原创 2024-04-01 09:51:58 · 985 阅读 · 0 评论 -
MySql实战--MySQL为什么有时候会选错索引
前面我们介绍过索引,你已经知道了在MySQL中一张表其实是可以支持多个索引的。但是,你写SQL语句的时候,并没有主动指定使用哪个索引。也就是说,使用哪个索引是由MySQL来确定的。不知道你有没有碰到过这种情况,一条本来可以执行得很快的语句,却由于MySQL选错了索引,而导致执行速度变得很慢?我们一起来看一个例子吧。然后,我们往表t中插入10万行记录,取值按整数递增,即:(1,1,1),(2,2,2),(3,3,3) 直到(100000,100000,100000)。原创 2024-03-29 18:18:28 · 1140 阅读 · 0 评论 -
MySql实战--普通索引和唯一索引,应该怎么选择
在前面的基础篇文章中,我给你介绍过索引的基本概念,相信你已经了解了唯一索引和普通索引的区别。今天我们就继续来谈谈,在不同的业务场景下,应该选择普通索引,还是唯一索引?假设你在维护一个市民系统,每个人都有一个唯一的身份证号,而且业务代码已经保证了不会写入两个重复的身份证号。所以,你一定会考虑在id_card字段上建索引。由于身份证号字段比较大,我不建议你把身份证号当做主键,那么现在你有两个选择,要么给id_card字段创建唯一索引,要么创建一个普通索引。原创 2024-03-28 09:39:38 · 1181 阅读 · 0 评论 -
MySql实战--事务到底是隔离的还是不隔离的
第3篇文章和你讲事务隔离级别的时候提到过,如果是可重复读隔离级别,事务T启动的时候会创建一个视图read-view,之后事务T执行期间,即使有其他事务修改了数据,事务T看到的仍然跟在启动时看到的一样。也就是说,一个在可重复读隔离级别下执行的事务,好像与世无争,不受外界影响。但是,我在上一篇文章中,和你分享行锁的时候又提到,一个事务要更新一行,如果刚好有另外一个事务拥有这一行的行锁,它又不能这么超然了,会被锁住,进入等待状态。原创 2024-03-27 10:09:04 · 899 阅读 · 0 评论 -
MySql实战--行锁功过:怎么减少行锁对性能的影响
在上一篇文章中,我跟你介绍了MySQL的全局锁和表级锁,今天我们就来讲讲MySQL的行锁。MySQL的行锁是在引擎层由各个引擎自己实现的。但并不是所有的引擎都支持行锁,比如MyISAM引擎就不支持行锁。不支持行锁意味着并发控制只能使用表锁,对于这种引擎的表,同一张表上任何时刻只能有一个更新在执行,这就会影响到业务并发度。InnoDB是支持行锁的,这也是MyISAM被InnoDB替代的重要原因之一。我们今天就主要来聊聊InnoDB的行锁,以及如何通过减少锁冲突来提升业务并发度。原创 2024-03-26 10:28:21 · 1022 阅读 · 0 评论 -
MySql实战--全局锁和表锁 :给表加个字段怎么有这么多阻碍
今天我要跟你聊聊MySQL的锁。数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构。根据加锁的范围,MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类。今天这篇文章,我会和你分享全局锁和表级锁。而关于行锁的内容,我会留着在下一篇文章中再和你详细介绍。这里需要说明的是,锁的设计比较复杂,这两篇文章不会涉及锁的具体实现细节,主要介绍的是碰到锁时的现象和其背后的原理。原创 2024-03-25 11:08:22 · 1264 阅读 · 0 评论 -
MySql实战--深入浅出索引(下)
在开始这篇文章之前,我们先来看一下这个问题:在下面这个表T中,如果我执行 select * from T where k between 3 and 5,需要执行几次树的搜索操作,会扫描多少行?下面是这个表的初始化语句。图1 InnoDB的索引组织结构现在,我们一起来看看这条SQL查询语句的执行流程:在k索引树上找到k=3的记录,取得 ID = 300;再到ID索引树查到ID=300对应的R3;在k索引树取下一个值k=5,取得ID=500;再回到ID索引树查到ID=500对应的R4;原创 2024-03-22 10:03:51 · 1059 阅读 · 0 评论 -
MySql实战--深入浅出索引(上)
提到数据库索引,我想你并不陌生,在日常工作中会经常接触到。比如某一个SQL查询比较慢,分析完原因之后,你可能就会说“给某个字段加个索引吧”之类的解决方案。但到底什么是索引,索引又是如何工作的呢?今天就让我们一起来聊聊这个话题吧。数据库索引的内容比较多,我分成了上下两篇文章。索引是数据库系统里面最重要的概念之一,所以我希望你能够耐心看完。在后面的实战文章中,我也会经常引用这两篇文章中提到的知识点,加深你对数据库索引的理解。一句话简单来说,索引的出现其实就是为了提高数据查询的效率,就像书的目录一样。原创 2024-03-21 16:00:54 · 872 阅读 · 0 评论 -
MySql实战--事务隔离:为什么你改了我还看不见
提到事务,你肯定不陌生,和数据库打交道的时候,我们总是会用到事务。最经典的例子就是转账,你要给朋友小王转100块钱,而此时你的银行卡只有100块钱。转账过程具体到程序里会有一系列的操作,比如查询余额、做加减法、更新余额等,这些操作必须保证是一体的,不然等程序查完之后,还没做减法之前,你这100块钱,完全可以借着这个时间差再查一次,然后再给另外一个朋友转账,如果银行这么整,不就乱了么?这时就要用到“事务”这个概念了。简单来说,事务就是要保证一组数据库操作,要么全部成功,要么全部失败。原创 2024-03-21 11:17:22 · 813 阅读 · 0 评论 -
MySql实战--怎么给字符串字段加索引
现在,几乎所有的系统都支持邮箱登录,如何在邮箱这样的字段上建立合理的索引,是我们今天要讨论的问题。从第4和第5篇讲解索引的文章中,我们可以知道,如果email这个字段上没有索引,那么这个语句就只能做全表扫描。同时,MySQL是支持前缀索引的,也就是说,你可以定义字符串的一部分作为索引。默认地,如果你创建索引的语句不指定前缀长度,那么索引就会包含整个字符串。第一个语句创建的index1索引里面,包含了每个记录的整个字符串;而第二个语句创建的index2索引里面,对于每个记录都是只取前6个字节。原创 2024-03-21 10:35:05 · 803 阅读 · 0 评论 -
【MySql实战--日志系统:一条SQL更新语句是如何执行的?】
前面我们系统了解了一个查询语句的执行流程,并介绍了执行过程中涉及的处理模块。相信你还记得,一条查询语句的执行过程一般是经过连接器、分析器、优化器、执行器等功能模块,最后到达存储引擎。那么,一条更新语句的执行流程又是怎样的呢?之前你可能经常听DBA同事说,MySQL可以恢复到半个月内任意一秒的状态,惊叹的同时,你是不是心中也会不免会好奇,这是怎样做到的呢?前面我有跟你介绍过SQL语句基本的执行链路,这里我再把那张图拿过来,你也可以先简单看看这个图回顾下。原创 2024-03-20 17:18:00 · 845 阅读 · 0 评论 -
MySql实战--一条SQL查询语句是如何执行的?
平时我们使用数据库,看到的通常都是一个整体。我们看到的只是输入一条语句,返回一个结果,却不知道这条语句在MySQL内部的执行过程。所以今天我想和你一起把MySQL拆解一下,看看里面都有哪些“零件”,希望借由这个拆解过程,让你对MySQL有更深入的理解。这样当我们碰到MySQL的一些异常或者问题时,就能够直戳本质,更为快速地定位并解决问题。下面我给出的是MySQL的基本架构示意图,从中你可以清楚地看到SQL语句在MySQL的各个功能模块中的执行过程。MySQL的逻辑架构图。原创 2024-03-20 16:28:26 · 544 阅读 · 0 评论 -
【MySQL 合理选择数据类型】
作为后台开发,设计表是我们开发的一个重要环节,大家设计表的时候有没有仔细考虑过呢?本文首先介绍了选择字段的原则。然后从 整型,小数,字符串,时间等字段类型进行详细说明并进行比较。希望通过本文学习,大家能对这块的内容有更深的理解。原创 2023-03-09 14:09:28 · 568 阅读 · 0 评论 -
六:MySQL 锁
六:MySQL 锁什么是锁lock 与 latchInnoDB 存储引擎中的锁锁的类型什么是锁锁是数据库系统区别于文件系统的一个关键特性。锁机制用于管理对共享资源的并发访问。数据库系统使用锁是为了支持对共享资源进行并发访问提供数据的完整性和一致性。InnoDB存储引擎锁的实现和Oracle数据库非常类似,提供一致性的非锁定读,行级锁支持。行级锁没有相关额外的开销,并可以同事得到并发性和一致性。lock 与 latch在数据库中,lock和latch都可以称为锁,但两者含义截然不同。Latch一般称原创 2022-05-24 20:03:44 · 49 阅读 · 0 评论 -
group by语句,join on ,left join on ,vue 的下拉框,按钮事件,方法的触发等。
最近项目里要写报表,我写了5-6张报表,包括sql语句和页面表格(vue实现).业务不是很复杂。最多就关联7-8张表。前面有点捉急,vue的很多不会,慢慢的网上查查,问下前端。功能基本能实现(三个功能)1.查询,2.选择条件(比如时间,部门,订单等)来查询3.导出信息。这里分享下最近一些知识点。首先说下sql语句。看到一个需求,第一,要将需求分解。在多个字段中(如果是多张表)找到一个主...原创 2018-08-11 16:39:43 · 581 阅读 · 0 评论 -
五:MySQL索引与算法
五:索引与算法概述数据结构和算法二分查找法二叉查找树和平衡二叉树B+树B+树的插入操作第一种情况:第二种情况第三种情况B+树的删除操作第一种情况:第二种情况:B+树索引聚集索引概述InnoDB存储引擎支持以下几种常见的索引:B+ 树索引,全文索引, 哈希索引. 其中 哈希索引是自适应的,InnoDB存储引擎会根据表的使用情况自动为表生成哈希索引。不能人为干预是否在一张表中生成哈希索引。B+树索引就是传统意义上的索引,这是目前关系型数据库系统中查找最为常用和最为有效的索引.B+树索引的构造类似于二叉树,原创 2022-05-20 17:54:57 · 637 阅读 · 0 评论 -
四:MySQL 表介绍
四:MySQL 表介绍概述介绍索引组织表InnoDB 逻辑存储结构表空间段区页行InnoDB行记录格式Compact行记录格式行溢出数据InnoDB数据页结构约束数据完整性视图作用物化视图分区分区类型RANGE 分区LIST分区概述介绍主要分析表的物理存储特征,即数据在表中是如何组织和存放的.简单来说,表就是关于特定实体的数据集合.这也是关系型数据库模型的核心索引组织表在InnoDB存储引擎中,表都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表.在InnoDB存储引擎表中,每个表都有主键.原创 2022-05-12 09:10:40 · 1513 阅读 · 0 评论 -
三 MySQL文件
Mysql数据库和InnoDB存储引擎表的各种文件,包括参数文件:告诉Mysql 实例启动时在哪里找到数据库文件,并指定了某些初始化参数.日志文件:用来记录Mysql实例对某种条件做出响应时写入的文件.如错误日志文件,二进制日志文件,慢查询日志文件,查询日志文件等.socket文件: 当用UNIX域套接字方式进行连接时需要的文件pid文件: MySql 实例的进程ID文件MySql表结构文件:用来存放MySql表机构定义文件存储引擎文件:每个存储引擎都会有自己的文件来保存各种数据。这原创 2022-05-07 14:47:38 · 461 阅读 · 0 评论 -
二:MySQL InnoDB存储引擎
一:Innodb的版本区别介绍,可以简单了解下.二:Innodb存储引擎概述.第一个完整支持ACID事物的MySql存储引擎,特点是行锁设计,支持MVCC,支持外键,提供一致性非锁读。同时被设计用来最有效地利用以及使用内存和CPU.三:Innodb体系结构从图中可以看到.Innodb存储引擎中由多个内存块. 可以认为这些内存块组成了一个大的内存池,负责如下工作:1.维护所有进程/线程,需要访问的多个内部数据结构。2.缓存磁盘上的数据,方便快速读取,同时在对磁盘文件的数据修改之原创 2022-05-06 10:11:57 · 331 阅读 · 0 评论 -
一:MySQL体系结构和存储引擎
mysql 的基本概念和特性是常考的面试题。本文将这些都简要的进行了介绍。原创 2022-04-30 23:11:45 · 585 阅读 · 0 评论 -
Oracle大表分区(表大小超过2G)
背景:公司要求将数据库中表超过2G的表进行分区。刚好我们负责的表有5张大于2G的。所以需要进行表分区。所谓分区,讲的的通俗点,就是根据某个字段的范围进行划分,将表分成几块。以后查询,维护都更加方便。 比如可以根据创建时间,2018年的数据放入一个分区,以后每3年存入一个分区。实际环境:我负责的这个表,大小是12G作右,接近7千万条数据。因为这个表已经使用了很多年了,刚开始建表的时...原创 2019-11-23 17:20:18 · 2817 阅读 · 0 评论 -
常见sql 面试题
之前面试遇到一个sql题。当时没写出sql语句,把题目记下。现在分享给大家(知识贵在精,学会举一反三)。这里采用的是mysql.sql语句如下。DROP TABLE IF EXISTS `depart_month`;CREATE TABLE `depart_month` ( `id` int(11) NOT NULL AUTO_INCREMENT,//id自增长 `depa...原创 2019-01-09 19:22:44 · 1167 阅读 · 3 评论 -
sql server的数据库的转移
前一段时间,客户的服务器经常出现问题,不得已得更换服务器,所以服务器上的sql server数据库同样需要进行转移。这里建议一个相对方便的方式。借助于sql server的工具,Management studio.工具下载地址:https://download.youkuaiyun.com/download/echohuangshihuxue/10898132首先选择需要转移的数据库右键选择第...原创 2019-01-05 19:14:10 · 616 阅读 · 2 评论