
mysql
文章平均质量分 70
mysql技术总结
萧木易
日拱一卒,精益求精
展开
-
MySQL的json查询之json_array
目的:查询为数组类型的json数据,需要使用JSON_CONTAINS和JSON_ARRAY两个函数。使用方法 JSON_CONTAINS(JSON_ARRAY(数据注意数据类型),`字段`)原创 2022-09-21 17:55:10 · 3483 阅读 · 0 评论 -
Warning: World-writable config file ‘/etc/my.cnf’ is ignored
/etc/my.cnf’ is ignored ,大概意思是权限全局可写,任何一个用户都可以写。mysql担心这种文件被其他用户恶意修改,所以忽略掉这个配置文件。导致无法进入,这也是mysql的安全机制之一。所以我们必须得改一些权限。设置其他用户不可写。今天用shell来直接登录MySQL,报错如下。原创 2022-09-21 09:40:31 · 2691 阅读 · 0 评论 -
mysql判断是否包含某字符串的方法
现在我们遇到这样一个需求,字段里面的值存储形式是这样的,‘12,15’,‘3,5,2,14’, ‘22,25,28,29’,然后需要判断字段里面是否有5这个值,如果我们使用like的话,肯定是得不到正确的结果。like的用法肯定都很熟悉,它可以匹配字段以某字符串开始,以某字符串结尾,包含有某字符串,用法如下:like ‘string%’,like ‘%string’,like ‘%string%’这是因为在find_in_set中,它是以,为分割的,所以单独查3是查不到的,应该查’[3’;原创 2022-09-09 15:31:42 · 3294 阅读 · 0 评论 -
记录一次sql查询方法,判断值是否存在FIND_IN_SET
【代码】记录一次sql查询方法,判断值是否存在FIND_IN_SET。原创 2022-08-31 16:23:28 · 425 阅读 · 0 评论 -
【MySQL】对JSON数据进行查询
MySQL根据JSON字段的内容检索查询数据使用 字段->'$.json属性' 进行查询条件使用 json_extract 函数查询,json_extract(字段, "$.json属性")根据json数组查询,用 JSON_CONTAINS(字段, JSON_OBJECT('json属性', "内容"))MySQL5.7以上支持JSON的操作,以及增加了JSON存储类型一般数据库存储JSON类型的数据会用JSON类型或者TEXT类型注意:用JSON类型的话。...原创 2022-08-08 10:38:10 · 7025 阅读 · 0 评论 -
docker-compose部署mysql
cd /root。原创 2022-08-06 19:41:54 · 1307 阅读 · 0 评论 -
SQL优化万能公式:5 大步骤 + 10 个案例
导读:在应用开发的早期,数据量少,开发人员开发功能时更重视功能上的实现,随着生产数据的增长,很多SQL语句开始暴露出性能问题,对生产的影响也越来越大,有时可能这些有问题的SQL就是整个系统性能的瓶颈。SQL优化一般步骤1、通过慢查日志等定位那些执行效率较低的SQL语句2、explain 分析SQL的执行计划需要重点关注type、rows、filtered、extra。type由上至下,效率越来越高ALL 全表扫描index 索引全扫描range 索引范围扫描,常用语...原创 2022-07-01 14:40:01 · 868 阅读 · 0 评论 -
MySQL慢查询:慢SQL定位、日志分析与优化方案
每一个SQL都需要消耗一定的I/O资源,SQL执行的快慢直接决定了资源被占用时间的长短。假设业务要求每秒需要完成100条SQL的执行,而其中10条SQL执行时间长导致每秒只能完成90条SQL,所有新的SQL将进入排队等待,直接影响业务master数据库->slave数据库:采用读写分离架构,读在从库slave上执行,写在主库master上执行。但由于从库的数据都是在主库复制过去的,主库如果等待较多的情况,会加大从库的复制延时执行SQL次数多的优先治理某张表被告并发集中访问的优先治理为了更好的优化慢SQL,我原创 2022-07-01 14:27:52 · 261 阅读 · 0 评论 -
使用变量对 SQL 进行优化
1什么是变量变量其实就是我们定义的一个可变参数,其基本语法如下:其中DECLARE @部分是固定写法,@I是变量名称,变量必须定义类型,一般会定义为字符型,整数型,时间类型等。赋值部分SET也是固定写法,就是对变量@I进行赋值,=右边的就是赋值内容了定义好变量后就可以将其带入到查询语句中了,每次只需要修改赋值部分,查询语句就会根据赋值内容查询出相应的结果想了解变量的更多解释可以看我前面写的《SQL中的变量》2为什么要使用变量使用变量后,相同的查询语句如果只是赋值不同,可以重复使用第一次的执行计划,做到一次解原创 2022-07-01 14:24:41 · 196 阅读 · 0 评论 -
MySQL 索引失效的几种类型以及解决方式
上面的这条 sql phone 字段类型是 字符串类型的,但是没有使用 '13088772233 ', SQL 就全表扫描了,所以字符串索引要使用 ‘’解决方式是什么呢,可以提前计算好条件,不要使用索引,或者可以使用其他的 sql 替换上面的,比如,上面的sql 可以使用 like 来代替。最左原则,就是要最左边的优先存在,我不在的话,你们自己就玩不动了,除非你自己单独创立一个索引,下面这几条 SQL 就可以走索引执行。使用 or 查询部分字段没有使用索引。or 查询部分字段没有使用索引。原创 2022-09-20 20:20:32 · 653 阅读 · 0 评论 -
执行一条 SQL 语句在服务器上的执行过程
学习 SQL 的时候,大家肯定第一个先学到的就是 select 查询语句了,比如下面这句查询语句:但是有没有想过,执行一条 select 查询语句,在 MySQL 中期间发生了什么?带着这个问题,我们可以很好的了解 MySQL 内部的架构。所以,这次小林就带大家拆解一下 MySQL 内部的结构,看看内部里的每一个“零件”具体是负责做什么的。先来一个上帝视角图,下面就是 MySQL 执行一条 SQL 查询语句的流程,也从图中可以看到 MySQL 内部架构里的各个功能模块。查询语句执行流程可以看到, My原创 2022-06-20 10:00:40 · 1040 阅读 · 0 评论 -
sql语句优化的30种方法
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。2.应尽量避免在 where 子句中使用!=或操作符,否则将引擎放弃使用索引而进行全表扫描。3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:..原创 2022-06-20 09:44:12 · 672 阅读 · 0 评论 -
Mybatis超强大的动态 SQL 大全
读完这篇文章里你能收获到 Mybatis动态SQL语句大全 Mybatis中如何定义变量 Mybatis中如何提取公共的SQL片段 1. If 语句需求:根据作者名字和博客名字来查询博客!如果作者名字为空,那么只根据博客名字查询,反之,则根据作者名来查询<!--需求1:根据作者名字和博客名字来查询博客!如果作者名字为空,那么只根据博客名字查询,反之,则根据作者名来查询select*fromblogwheretitle=#{title}and...原创 2022-05-31 14:00:14 · 243 阅读 · 0 评论 -
盘点MySQL慢查询的12个原因
前言日常开发中,我们经常会遇到数据库慢查询。那么导致数据慢查询都有哪些常见的原因呢?今天田螺哥就跟大家聊聊导致MySQL慢查询的12个常见原因,以及对应的解决方法。1. SQL没加索引很多时候,我们的慢查询,都是因为没有加索引。如果没有加索引的话,会导致全表扫描的。因此,应考虑在where的条件列,建立索引,尽量避免全表扫描。反例:select*fromuser_infowherename='捡田螺的小男孩公众号';正例://添加索引alterta...原创 2022-05-31 11:28:58 · 2734 阅读 · 0 评论 -
MySQL 有哪些死锁场景
MySQL 有哪些死锁场景?首先一起来复习一下死锁的概念:死锁是指两个或者多个事务在同一资源上相互占用,并请求锁定对方占用的资源,从而导致恶性循环的现象。下面我们通过几个实验,来验证几种死锁场景。1 环境准备use martin;drop table if exists dl;CREATE TABLE `dl` (`id` int(11) NOT NULL AUTO_INCREMENT,`a` int(11) NOT NULL,`b` int(11) NOT NULL,`c` int(11原创 2022-05-26 14:11:13 · 1180 阅读 · 0 评论 -
当前读和快照读的区别
涉及到 MySQL 的面试时,是不是经常会被问到当前读和快照读的区别?本节内容就来聊聊这个话题,首先从快照读开始:1 普通读1.1 定义普通读(也称快照读,英文名:Consistent Read),就是单纯的 SELECT 语句,不包括下面这两类语句:SELECT ... FOR UPDATESELECT ... LOCK IN SHARE MODE普通读的执行方式是生成 ReadView,直接利用 MVCC 机制来进行读取,并不会对记录进行加锁。小贴士对于 SE原创 2022-05-26 14:09:42 · 282 阅读 · 1 评论 -
PMM 监控 MySQL
MySQL 监控方案:PMM(Percona Monitoring and Management )。PMM 是一款免费的开源监控工具,可以用来监控 MySQL、MongoDB 和 PostgreSQL 等数据库。虽然还是依赖 Prometheus 和 Grafana,但它是对这些组件做了二次开发,监控数据更加丰富,部署也方便很多。特别对于 MySQL,还有特定对 InnoDB、TokuDB、PXC 和慢查询语句的监控 dashboard,可以说非常适合做为 MySQL 的企业级监控方案。原创 2022-05-26 14:06:30 · 2058 阅读 · 1 评论 -
MySQL常用的统计语句
这一节内容,整理一些管理 MySQL 会经常用到的统计语句,比如表的碎片率、非 InnoDB 的表、所有用户和所有业务库等。1 查看所有业务库selectschema_namefrominformation_schema.schematawhereschema_namenotin('information_schema','sys','mysql','performance_schema');注意:information_schema 中的数据默认不是实时的数据,如果需要...原创 2022-05-26 13:58:18 · 2929 阅读 · 0 评论 -
MySQL复制原理
在之前的MySQL系列文章中陆陆续续分享了MySQL 架构中的表结构设计、索引设计。对业务开发的同学来说,掌握这些内容已经能很好地面向业务逻辑进行编码工作了。但是业务需要上线,所以除了表和索引的结构设计之外,你还要做好高可用的设计。因为在真实的生产环境下,如果发生物理硬件故障,没有搭建高可用架构,会导致业务完全不可用。而这在海量并发访问的互联网业务中完全不敢想象。所以除了业务架构,还要做好可用性的架构设计。今天我们就来学习 MySQL 高可用架构中最基础、最为核心的内容:MySQL 复制(Rep原创 2022-05-26 13:50:17 · 402 阅读 · 0 评论 -
SQL中的开窗函数
OVER的定义OVER用于为行定义一个窗口,它对一组值进行操作,不需要使用GROUP BY子句对数据进行分组,能够在同一行中同时返回基础行的列和聚合列。OVER的语法OVER ([ PARTITION BYcolumn ][ ORDER BY culumn ])PARTITION BY 子句进行分组;ORDER BY 子句进行排序。窗口函数OVER()指定一组行,开窗函数计算从窗口函数输出的结果集中各行的值。开窗函数不需要使用GROUP BY就可以对数据进行分组,...原创 2022-05-25 13:49:15 · 9462 阅读 · 0 评论 -
突发状况,数据库表被锁
背景在程序员的职业生涯中,总会遇到数据库表被锁的情况,前些天就又撞见一次。由于业务突发需求,各个部门都在批量操作、导出数据,而数据库又未做读写分离,结果就是:数据库的某张表被锁了!用户反馈系统部分功能无法使用,紧急排查,定位是数据库表被锁,然后进行紧急处理。这篇文章给大家讲讲遇到类似紧急状况的排查及解决过程,建议点赞收藏,以备不时之需。故障追踪用户反馈某功能页面报502错误,于是第一时间看服务是否正常,数据库是否正常。在控制台看到数据库CPU飙升,堆积大量未提交事务,部分事务已经阻塞了很长时原创 2022-05-24 17:38:38 · 996 阅读 · 0 评论 -
都是同样条件的mysql select语句,为什么读到的内容却不一样?
作者| 小白出品 |小白debug(ID:xiaobaidebug假设当前数据库里有下面这张表。user表数据库原始状态老规矩,以下内容还是默认发生在innodb引擎的可重复读隔离级别下。都是select结果却不同大家可以看到,线程1,同样都是读age >= 3的数据。第一次读到1条数据,这个是原始状态。这之后线程2将id=2的age字段也改成了3。线程1此时再读两次,一次读到的结果还是原来的1条,另一次读的结果却是2条,区别在于加没加for updat...原创 2022-05-24 17:36:32 · 570 阅读 · 0 评论 -
阿里一面:SQL 优化有哪些技巧
MySQL 相信大家一定都不陌生,但是不陌生不一定会用!会用不一定能用好!今天,Tom哥就带大家复习一个高频面试考点,SQL 优化有哪些技巧?当然这个还是非常有实用价值的,工作中你也一定用的上。如果应用得当,升职加薪,指日可待1、创建索引一定要记得创建索引,创建索引,创建索引重要的事说三遍!执行没有索引的 SQL 语句,肯定要走全表扫描,慢是肯定的。这种查询毫无疑问是一个慢 SQL 查询。那么问题来了,是不是要收集所有的 where 查询条件,然后针对所有的组合都创建原创 2022-05-24 17:34:47 · 957 阅读 · 1 评论 -
输入 SQL 到返回数据,到底发生了什么?
SQL 执行流程其实一个 SQL 从输入到返回数据,其过程大致为:建立连接、分析 SQL、优化 SQL、执行 SQL。建立连接当我们发送 SQL 给 MySQL 之前,我们都会输入账号和密码,从而与 MySQL 建立连接。这部分的工作,其实就是 MySQL 的连接器处理的。连接器负责跟客户端建立连接、获取权限、维持和管理连接。当我们用管理员账号对账号权限做修改后,不影响已经存在的连接的权限,只有新建的连接才会使用新的权限设置。我们可以通过show processlist命令查看目前的连接情况原创 2022-05-24 13:40:53 · 184 阅读 · 0 评论 -
协程是如何实现的
如果你需要访问多个服务来完成一个请求的处理,比如实现文件上传功能时,首先访问 Redis 缓存,验证用户是否登录,再接收 HTTP 消息中的 body 并保存在磁盘上,最后把文件路径等信息写入 MySQL 数据库中,你会怎么做?首先可以使用阻塞 API 编写同步代码,直接一步步串行即可,但很明显这时一个线程只能同时处理一个请求。而我们知道线程数是有限制的,有限的线程数导致无法实现上万级别的并发连接,过多的线程切换也抢走了 CPU 的时间,从而降低了每秒能够处理的请求数量。于是为了...原创 2022-05-18 15:43:23 · 1543 阅读 · 0 评论 -
如何写出一手好 SQL
背景最近频繁出现慢SQL告警,执行时间最长的竟然高达5分钟。导出日志后分析,主要原因竟然是没有命中索引和没有分页处理。其实这是非常低级的错误,我不禁后背一凉,团队成员的技术水平亟待提高啊。改造这些SQL的过程中,总结了一些经验分享给大家,如果有错误欢迎批评指正。MySQL性能最大数据量抛开数据量和并发数,谈性能都是耍流氓。MySQL没有限制单表最大记录数,它取决于操作系统对文件大小的限制。文件系统 单文件大小限制 FAT32 最大4G NTFS 最大64..原创 2022-05-18 15:36:36 · 224 阅读 · 0 评论 -
MySQL 8.0 需要调整哪些参数
这一节内容来聊聊新部署的 MySQL 8.0,需要调整哪些参数。包括一个 my.cnf 的示例和重要参数的解释及建议。1 my.cnf 示例首先列出一个 8.0 my.cnf 的实例,这个只针对普通的单实例或者主从环境,对于其他环境,比如 MGR,可能有更多的一些参数需要调整。并且也不是最完整,最终要根据自己实际环境进行调整。[client]port = 3306socket = /tmp/mysql.sock[mysqld]port = 3306so原创 2022-05-18 15:34:32 · 933 阅读 · 0 评论 -
SQL优化万能公式
1前言在应用开发的早期,数据量少,开发人员开发功能时更重视功能上的实现,随着生产数据的增长,很多SQL语句开始暴露出性能问题,对生产的影响也越来越大,有时可能这些有问题的SQL就是整个系统性能的瓶颈。2SQL优化一般步骤1、通过慢查日志等定位那些执行效率较低的SQL语句2、explain 分析SQL的执行计划需要重点关注type、rows、filtered、extra。type由上至下,效率越来越高 ALL 全表扫描 index..原创 2022-05-17 10:24:39 · 164 阅读 · 0 评论 -
数据库性能优化
毫不夸张地说,咱们后端工程师,无论在哪家公司,呆在哪个团队,做哪个系统,遇到的第一个让人头疼的问题绝对是数据库性能问题。如果我们有一套成熟的方法论,能让大家快速、准确的去选择出合适的优化方案,我相信能够快速准备解决咱们日常遇到的80%-90%的性能问题。从解决问题的角度出发,我们得先了解到问题的原因;其次我们得有一套思考、判断问题的流程方式,让我们合理的站在哪个层面选择方案;最后从众多的方案里面选择一个适合的方案进行解决问题,找到一个合适的方案的前提,是我们自己对各种方案之间的优缺点、场景有足够的了原创 2022-05-17 10:11:34 · 129 阅读 · 0 评论 -
一千行 MySQL 学习笔记
Windows服务-- 启动MySQL netstartmysql-- 创建Windows服务 sccreatemysql binPath= mysqld_bin_path(注意:等号与值之间有空格)连接与断开服务器mysql -h 地址 -P 端口 -u 用户名 -p 密码SHOWPROCESSLIST-- 显示哪些线程正在运行SHOWVARIABLES-- 显示系统变量信息数据库操作-- 查看当前数据库 SELECTDATABASE(...原创 2022-05-17 10:06:12 · 298 阅读 · 0 评论 -
DBA职责
一、DBA技术 1、作为一个DBA,你必须要精通SQL命令、各种数据库架构、数据库管理和维护、数据库调优,必要的时候,还需要为开发人员搭建一个健壮、结构良好、性能稳定的数据库环境。 2、数据库是构建在操作系统之上的,你还需要精通系统技术。当然,完全不必要学习系统管理员那样高深的技术理论。 3、你还需要掌握服务器硬件、软件技术理论。便于数据库基于服务器问题出现的时候,能够及时提出解决方案。 4、还要理解数据库在服务器、系统软件中如何实现和运作的。 二、了解DBA职责: 1、监视数据库。原创 2022-05-10 15:12:47 · 4776 阅读 · 1 评论 -
MySQL——JSON_REPLACE()函数修改JSON属性值
引言由于对mysql的函数并不了解,之前遇到了一个场景:mysql表中有一个字段res_content 是一个由longtext类型(可以理解为一个更长的varchar)保存的巨大的JSON对象,但是,由于录入的疏忽,导致这个json对象中的有一个属性值错误,需要重新修改这个json对象的属性值,于是,我将整个json对象,也就是res_content字段重新替换了一遍。=。= |||一个json中小小的属性需要更新,却要替换整个json对象,仅仅因为它在数据库中是以一个字段存储的!!?这也太傻.原创 2022-04-21 15:28:29 · 5068 阅读 · 2 评论 -
你离完全理解 SQL 只差这10步
很多程序员视 SQL 为洪水猛兽。SQL 是一种为数不多的声明性语言,它的运行方式完全不同于我们所熟知的命令行语言、面向对象的程序语言、甚至是函数语言(尽管有些人认为 SQL 语言也是一种函数式语言)。我们每天都在写 SQL 并且应用在开源软件 jOOQ 中。于是我想把 SQL 之美介绍给那些仍然对它头疼不已的朋友,所以本文是为了以下读者而特地编写的: 在工作中会用到 SQL 但是对它并不完全了解的人。 能够熟练使用 SQL 但是并不了解其语法逻辑的人。 想要教别人 SQL 的原创 2022-04-02 10:21:14 · 114 阅读 · 0 评论 -
查看Mysql数据库版本
一、使用终端1.参数为-V(大写字母)或者--version使用方法:D:\mysql\bin>mysql -V或者D:\mysql\bin>mysql --version😥 缺点只能在安装 Mysql 的服务器上执行2.MySQL 客户端命令:status (缩写为 \s)😄 status(\s)指令最为简便,但也只能在 MySQL 的命令行客户端(MySQL Command Line Client)中执行3.终端命令登录 mysql –u root原创 2022-03-29 15:27:47 · 21292 阅读 · 0 评论 -
MySQL派生表(derived)
1、什么是派生表derived关键字:子查询-->在From后where前的子查询例子:mysql> explain select * from (select * from t) a where id=2;+----+-------------+------------+------+---------------+-------------+---------+-------+------+-------+| id | select_type | table ...原创 2022-03-24 16:07:19 · 1873 阅读 · 0 评论 -
DEPENDENT SUBQUERY,包含from、投影列、in等
写在前面的话:在慢查优化1和2里都反复强调过 explain 的重要性,但有时候肉眼看不出 explain 结果如何指导优化,这时候还需要有一些其他基础知识的佐助,甚至需要了解 MySQL 实现原理,如子查询慢查优化。 看到 SQL 执行计划中 select_type 字段中出现“DEPENDENT SUBQUERY”时,要打起精神了!——MySQL 的子查询为什么有时候很糟糕——引子:这样的子查询为什么这么慢?下面的例子是一个慢查,线上执行时间相当夸张。为什么呢? SELEC原创 2022-03-24 15:58:22 · 1453 阅读 · 0 评论 -
mysql explain详解
在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。所以我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略预计会被优化器采用。-- 实际SQL,查找用户名为Jefabc的员工select * from emp原创 2022-03-24 14:29:41 · 228 阅读 · 0 评论 -
my.cnf设置
innodb_data_home_dir = /www/server/datainnodb_data_file_path = ibdata1:10M:autoextendinnodb_log_group_home_dir = /www/server/datainnodb_buffer_pool_size = 2048Minnodb_log_file_size = 1024Minnodb_log_buffer_size = 256Minnodb_flush_log_at_trx_commit =原创 2022-03-09 17:49:14 · 418 阅读 · 0 评论 -
my.cnf配置详解
一般情况下,my.ini 在 MySql 安装的根目录下,也有可能在隐藏文件夹“ProgramData”下面。my.cnf设置_萧木易的博客-CSDN博客为了方便读者阅读,我们省略了 my.ini 文件中的注释内容。下面分开介绍 my.ini 中参数的具体意义,文件内容如下:[client]port=3306[mysql]default-character-set=gbk上面显示的是客户端的参数,[client] 和 [mysql] 都是客户端,参数说明如下:port:表示..原创 2022-03-09 21:07:58 · 5369 阅读 · 0 评论 -
mysql8.0 group by规则设置
使用 sql 查询时 mysql 报如下错误,完整报错如下:ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'spider_rule.link_parameter.id' which is not functionally dependent on columns in GROUP BY clause; this is incomp原创 2022-03-09 17:49:45 · 1932 阅读 · 0 评论