mysql专题
文章平均质量分 94
smart哥
一名有10余年经验的互联网老兵,历经从传统软件公司到大型互联网公司的洗礼,早年在中兴通讯等大型通信公司担任项目leader,后随着互联网的崛起,先后在前美团支付等大型互联网公司担任架构师。对互联网架构底层技术有相当的研究和独特的见解,在多个领域有着丰富的实战经验。
展开
-
MySQL全面瓦解30:备份与恢复
恢复非常简单可以通过网络来备份和恢复备份的结果为ASCII文件,可以编辑与存储引擎无关非常灵活,可以使用mysqldump的工具提供很多可选项。必须由数据库服务器来完成备份和恢复过程备份结果占据更多的空间:逻辑备份在某些场景下比数据库文件本身还要大精度问题,无法保证还原出来的数据强一致还原时间长:还原之后,加载注释语句,转换存储格式,重建索引都需要消耗一定时间使用方式实现数据的备份和还原# 选择对应的数据库# 查询需要备份的数据。原创 2024-05-05 13:34:48 · 799 阅读 · 0 评论 -
MySQL全面瓦解29:分库分表之Partition功能详解
这种策略允许系统通过定义列表的值所对应的行数据进行分割。例如,我们根据岗位编码进行分区,不同岗位类型的编码对应到不同的分区去,达到分治的目的。6 )上述的SQL脚本,使用了列表匹配LIST函数对员工岗位编号进行分区,共分为4个分区,行政岗位 编号为46,77,89的对应在分区P0中,技术岗位 106,125,177类别在分区P1中,依次类推即可。1、分区和未分区占用文件空间大致相同 (数据和索引文件)2、查询语句中关键字段未建立索引字段时,分区时间远远优于未分区时间。原创 2024-05-05 13:31:50 · 812 阅读 · 0 评论 -
MySQL全面瓦解28:分库分表
类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择分区的。LIST分区通过使用“PARTITION BY LIST(expr)”来实现,其中“expr” 是某列值或一个基于某个列值、并返回一个整数值的表达式,然后通过“VALUES IN (value_list)”的方式来定义每个分区,其中“value_list”是一个通过逗号分隔的整数列表。18 );原创 2024-05-05 13:29:55 · 1003 阅读 · 0 评论 -
MySQL全面瓦解27:主从复制(原理 + 实践)
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-05-05 09:26:48 · 821 阅读 · 1 评论 -
MySQL全面瓦解26:代码评审中的MySQL(团队规范)
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-05-05 09:23:09 · 826 阅读 · 0 评论 -
MySQL全面瓦解25:构建高性能索引(案例分析篇)
上面给出了两种典型的问题,一种是没有使用索引使用原则进行索引构建,一种是遇到坑导致索引无效。我们在实际的应用中遇到过很多问题。比如:1、不多的数据结果集,但是涉及到超多个表join的低效脚本。2、无效的联表查询,就是其中一张联表没有任何使用,但是数据基数极大。(这也可能是某个时候业务变更导致的sql脚本忘了调整)。3、varchar类型字段等值比较没有写单引号,巨量基数笛卡尔积查询直接把从库搞死,在索引字段上做计算导致索引失效的。原创 2024-05-05 09:21:09 · 739 阅读 · 0 评论 -
MySQL全面瓦解24:构建高性能索引(策略篇)
1、正确理解和计算索引字段的区分度,文中有计算规则,区分度高的索引,可以快速得定位数据,区分度太低,无法有效的利用索引,可能需要扫描大量数据页,和不使用索引没什么差别。2、正确理解和计算前缀索引的字段长度,文中有判断规则,合适的长度要保证高的区分度和最恰当的索引存储容量,只有达到最佳状态,才是保证高效率的索引。3、联合索引注意最左匹配原则:必须按照从左到右的顺序匹配,MySQL会一直向右匹配索引直到遇到范围查询(>、原创 2024-05-04 21:08:28 · 638 阅读 · 0 评论 -
MySQL全面瓦解23:MySQL索引实现和使用
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-05-04 20:59:45 · 639 阅读 · 0 评论 -
MySQL全面瓦解22:索引的介绍和原理分析
MySQL官方对索引的定义为:索引(Index)是协助MySQL高效获取数据的数据结构。本质上,索引的目的是为了提高查询效率,通过不断地缩小想要获取数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件,也就是说,有了这种索引机制,我们可以总是用同一种查找方式来锁定数据。可以类比银行的保险柜,比如你要找归属你的保险柜子。如果没有索引,你需要拿着钥匙,一个个的保险柜的试过去才能找到属于你的保险柜。原创 2024-05-04 20:29:50 · 719 阅读 · 0 评论 -
MySQL全面瓦解21(番外):一次深夜优化亿级数据分页的奇妙经历
记住上次查找结果的主键位置,避免使用偏移量 offset1 /*记住了上次的分页的最后一条数据的id是100,这边就直接跳过100,从101开始扫描表*/56 /*记住了上次的分页的最后一条数据的id是4800000,这边就直接跳过4800000,从4800001开始扫描表*/执行结果1 [SQL]5 受影响的行: 06 时间: 0.001s78 [SQL]13 受影响的行: 014 时间: 0.000s。原创 2024-05-04 09:22:04 · 804 阅读 · 0 评论 -
MySQL全面瓦解20:可编程性之流程控制语句
1、了解了IF函数,它常用在SELECT语句中,类似于C#中的三元表达式。2、IF条件表达式,类似于C#中的IF... ELSE...,多用于函数或存储过程中的判断选择逻辑。3、了解CASE语句的两种用法,一种用在SELECT中使用,一种用在函数和存储过程中。4、了解了三种循环体的使用,while、repeat分别对应C#中的while 和 do while循环,loop类似于一个while(true)的死循环。原创 2024-05-04 09:18:53 · 575 阅读 · 0 评论 -
MySQL全面瓦解19:游标相关
我们经常会遇到这样的一种情况,需要对我们查询的结果进行遍历操作,并对遍历到的每一条数据进行处理,这时候就会使用到游标。所以:游标(Cursor)是处理数据的一种存储在MySQL服务器上的数据库查询方法,为了查看或者处理结果集中的数据,提供了在结果集中一次一行遍历数据的能力。游标主要用在循环处理、存储过程、函数、触发器 中。1、游标用来对查询结果进行遍历处理。2、游标的使用过程:声明游标、打开游标、遍历游标、关闭游标。3、游标主要用在循环处理、存储过程、函数中使用,用来查询结果集。原创 2024-05-04 09:17:05 · 623 阅读 · 0 评论 -
MySQL全面瓦解18:自定义函数
我们之前学习了MySQL的内置函数非常丰富,满足了我们对数据操作的大部分需求。但是如果有一些复杂的业务逻辑在数据库层面就可以完成,无需在程序层面完成的时候,这时候就可以写成MySQL自定义函数。所以,函数是指 一组预编译好的sql语句集合,理解成批处理语句,类似于C# 中的方法,但是必须有返回值。调用函数等于一次性执行了这些语句,有利降低语句重复编写和调用。原创 2024-05-03 08:05:16 · 642 阅读 · 0 评论 -
MySQL全面瓦解17:触发器相关
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-05-03 08:03:38 · 994 阅读 · 0 评论 -
MySQL全面瓦解16:存储过程相关
大多数SQL语句都是针对一个或多个表的单条语句。但并非所有业务都这么简单,经常会有复杂的操作需要多条语句才能完成。比如用户购买一个商品,要删减库存表,要生成订单数据,要保存支付信息等等,他是一个批量的语句执行行为。存储过程简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合。可将其视为批文件,虽然它们的作用不仅限于批处理。优点:把一些通用操作内容封装到一个存储过程中,可以不断的给业务功能复用。避免在业务中写大量的代码减少执行次数和数据库服务器连接次数。原创 2024-05-03 08:02:10 · 959 阅读 · 0 评论 -
MySQL全面瓦解15:视图
很多时候,我们会有一些很复杂的数据库操作,比如整合用户的行为数据,那这些数据可能包含用户的餐饮、生活日用、充值消费、交通出行、通讯物流、交通出行、医疗保健、住房物业、运动健康...基于此,我们可能要去关联很多的用户行为信息表,写一大堆的合并、统计,以及条件过滤的脚本,来输出最终的二维表,这才是用户真正需要的数据。如果把这些复杂的脚本写在业务程序中不是很合理,那有什么办法把这些脚本细节隐藏,只显示只显示简洁的结果呢,那就要用到视图了。原创 2024-05-02 17:31:03 · 2 阅读 · 0 评论 -
MySQL全面瓦解14:事务
1、认识ACID(原子性、一致性、隔离性、持久性)特性及其实现原理2、了解事务的脏读、幻读、不可重复读3、了解事务的隔离级别以及原理。原创 2024-05-02 17:29:23 · 0 阅读 · 0 评论 -
MySQL全面瓦解13:系统函数相关
提到MySQL的系统函数,我们前面有使用过聚合函数,其实只是其中一小部分。MySQL提供很多功能强大、方便易用的函数,使用这些函数,可以极大地提高用户对于数据库的管理效率,并更加灵活地满足不同用户的需求。本文将MySQL的函数分类并汇总,以便提供后面使用中的参考。mysql的系统函数还是比较强大的,一个个验证写了快一天,泪崩,如果能熟练使用到我们开发中会事半功倍。这篇分类清晰,可以当作参考工具使用。原创 2024-05-02 17:27:39 · 2 阅读 · 0 评论 -
MySQL全面瓦解12:连接查询的原理和应用
MySQL最强大的功能之一就是能在数据检索的执行中连接(join)表。大部分的单表数据查询并不能满足我们的需求,这时候我们就需要连接一个或者多个表,并通过一些条件过滤筛选出我们需要的数据。了解MySQL连接查询之前我们先来理解下笛卡尔积的原理。1、连接查询必然要带上连接条件,否则会变成笛卡尔乘积数据,使用不正确的联结条件,也将返回不正确的数据。2、SQL规范推荐首选INNER JOIN语法。原创 2024-05-02 09:39:00 · 2 阅读 · 0 评论 -
MySQL全面瓦解11:子查询和组合查询
子查询是SQL查询中的重要一块,是我们基于多表之间进行数据聚合和判断的一种手段,使得我们的处理复杂数据更加的便捷,这一节我们主要来了解一下子查询。34 /*班级表*/7 `classid` int primary key AUTO_INCREMENT comment '班级id',8 `classname` varchar(30) DEFAULT NULL comment '班级名称'9 ) ENGINE=InnoDB comment '班级表';10。原创 2024-05-02 09:36:24 · 4 阅读 · 0 评论 -
MySQL全面瓦解10:分组查询和聚合函数
相信我们经常会遇到这样的场景:想要了解双十一天猫购买化妆品的人员中平均消费额度是多少(这可能有利于对商品价格区间的定位);或者不同年龄段的化妆品消费占比是多少(这可能有助于对商品备货量的预估)。这个时候就要用到分组查询,分组查询的目的是为了把数据分成多个逻辑组(购买化妆品的人员是一个组,不同年龄段购买化妆品的人员也是组),并对每个组进行聚合计算的过程:。说明一下:1、group_fun 代表聚合函数,是指对分组的数据进行聚合计算的函数。原创 2024-05-02 09:34:37 · 4 阅读 · 0 评论 -
MySQL全面瓦解9:查询的排序、分页相关
数据库中的数据直接呈现出来一般不是我们想要的,所以我们上两节演示了如何对数据进行过滤的方法。除了对数据进行过滤,我们可能还需要对数据进行排序,比如想从列表中了解消费最高的项,就可能需要对金额字段做降序排序,想看年龄从小到大的分布情况,就可能需要对user表的age字段进行升序排序。也可能需要对数据进行限制,比如我们需要对付款的1~10,11~20,21~30 名的用户分别赠予不同的礼品,这时候对数据的限制就很有用了。备注:下面脚本中[]包含的表示可选,| 分隔符表示可选其一。原创 2024-04-29 20:28:02 · 625 阅读 · 0 评论 -
MySQL全面瓦解8:查询的正则匹配
上一章查询的过滤条件,我们了解了MySQL可以通过 like % 通配符来进行模糊匹配。同样的,它也支持其他正则表达式的匹配,我们在MySQL中使用 REGEXP 操作符来进行正则表达式匹配。用法和like相似,但又强大很多,能够实现一些很特殊的、复杂的规则匹配。正则表达式使用REGEXP命令进行匹配时,如果符合返回1,不符合返回0。如果 默认不加任何匹配规则REGEXP相当于like '%%'。在前面加上NOT(NOT REGEXP)相当于NOT LIKE。原创 2024-04-29 20:26:03 · 651 阅读 · 0 评论 -
MySQL全面瓦解7:查询的过滤条件
在实际的业务场景应用中,我们经常要根据业务条件获取并筛选出我们的目标数据。这个过程我们称之为数据查询的过滤。而过滤过程使用的各种条件(比如日期时间、用户、状态)是我们获取精准数据的必要步骤,这样才能得到我们期望的结果。所以本章我们来学习MySQL中查询过滤条件的各种用法。1、like表达式中的%匹配一个到多个任意字符,_匹配一个任意字符2、空值查询需要使用IS NULL或者IS NOT NULL,其他查询运算符对NULL值无效。即使%通配符可以匹配任何东西,也不能匹配值NULL的数据。原创 2024-04-29 20:14:33 · 342 阅读 · 0 评论 -
MySQL全面瓦解6:查询的基本操作
提到查询,就回到我们第四篇的SQL语言分类了,DQL(Data QueryLanguage),也就是数据查询语言,实际就是从数据库中获取数据的一种命令方式。我们给数据库发送一个查询语句的命令,数据库按需返回相应的数据。1、本片只是查询的基础篇,后续会引出 查询的过滤条件、排序、分页、分组、正则匹配过滤,以及复杂查询的性能优化等等。2、查询数据的时候,应遵循应需而查,查询需要的字段即可,切勿随意的使用*,数据量大的时候性能差距就明显了。原创 2024-04-29 15:16:23 · 197 阅读 · 0 评论 -
MySQL全面瓦解4:数据定义-DDL
DDL数据定义语言数据定义语言create、drop、alter语句。DDL数据定义语言数据定义语言create、drop、alter语句。DML数据操纵语言定义对数据库记录的增、删、改操作。DQL数据库查询语言select定义对数据库记录的查询操作。DCL数据库控制语言定义对数据库、表、字段、用户的访问权限和安全级别。(授权grant,收回权限revoke等)。TCL事务控制语言定义对数据库的事务操作。原创 2024-04-29 15:13:16 · 653 阅读 · 0 评论 -
MySQL全面瓦解3:数据类型介绍与分析
MySQL支持很多数据类型,以便我们能在复杂的业务场景中支持各种各样的数据格式,存储适当的数据内容。我们在设计数据库时,正确的使用数据库类型对整个数据库的整洁和高效,会有很大的帮助。目前常用的数据类型大致上可以分为4大类:整数类型、浮点数类型、字符串(字符)类型、日期/时间类型。详细如下4大类主要类型4大类主要类型整数类型浮点数类型字符串(字符)类型日期/时间类型。原创 2024-04-29 07:49:26 · 624 阅读 · 0 评论 -
MySQL全面瓦解2:常用命令和系统管理
还有很多常用的命令操作,后续再融入到他章节 一 一 解读。命令是用户进入正式数据库编程之前应知应会的部分,所以需要熟练掌握。使用过程中需要注意以下细节:命令的方式操作用户和权限不需要刷新,下一次登录就会自动生效,在mysql库表进行修改的,需要调用flush privileges;刷新一下,才会在下次登录生效。文中所说的host部分可以省略,默认值为%,表示所有机器,这个文中反复说过了。mysql中用户名、密码和权限的信息存储在库名为mysql的user表中,可以打开看看。原创 2024-04-29 07:47:46 · 724 阅读 · 0 评论 -
MySQL全面瓦解1:安装部署与准备
作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!原创 2024-04-29 07:44:14 · 410 阅读 · 0 评论