MySQL
文章平均质量分 75
Archie_java
求知若饥,虚心若愚(stay hungry,stay foolish)
好记性不如烂笔头
展开
-
MySQL慢查询日志slowlog
慢速查询日志记录的是执行时间超过秒和检查的行数超过的SQL语句,这些语句通常是需要进行优化的。官方参考文档:https://dev.mysql.com/doc/refman/8.0/en/slow-query-log.html。原创 2024-05-01 16:21:51 · 2464 阅读 · 0 评论 -
一文搞懂MySQL索引
官方介绍索引是帮助MySQL高效获取数据的数据结构。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往是存储在磁盘上的文件中的(可能存储在单独的索引文件中,也可能和数据一起存储在数据文件中)。我们通常所说的索引,包括聚集索引、覆盖索引、组合索引、前缀索引、唯一索引等,没有特别说明,默认都是使用B+树结构组织(多路搜索树,并不一定是二叉的)的索引。看到这里,你是不是对于自己的sql语句里面的索引的有了更多优化想法呢。原创 2024-04-13 23:47:06 · 828 阅读 · 0 评论 -
ON DUPLICATE KEY UPDATE 导致mysql自增主键ID跳跃增长
具体解决方案可以根据项目来选择,如果项目不大,可以考虑1和2。如果不考虑高并发问题,可以考虑3。原创 2024-03-24 16:16:20 · 910 阅读 · 0 评论 -
mysql唯一索引与null
根据NULL的定义,NULL表示的是未知,因此两个NULL比较的结果既不相等,也不不等,结果仍然是未知。根据这个定义,多个NULL值的存在应该不违反唯一约束,所以是合理的,在oracel也是如此。在mysql 的innodb引擎中,是允许在唯一索引的字段中出现多个null值的。有上面的表和数据可以看出,查询多条数据。原创 2024-03-17 00:10:47 · 706 阅读 · 0 评论 -
MySQL主从复制(基于binlog日志方式)
主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一般是准实时的业务数据库。主从复制的作用1.做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。2.架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。3.读写分离,使数据库能支撑更大的并发。a.从服务器可以执行查询工作(就是我们常说的读功能),降低主服务器压力;(主库写,从库读,降压)原创 2024-02-28 22:22:54 · 1907 阅读 · 0 评论 -
MYSQL 主从复制 --- binlog
在 Master 端并不 Care 有多少个 Slave 连上了自己,只要有 Slave 的 IO 线程通过了连接认证,向他请求指定位置之后的 Binary Log 信息,他就会按照该 IO 线程的要求,读取自己的 Binary Log 信息,返回给 Slave 的 IO 线程。默认MySQL是未开启该日志的。如果读压力加大,就需要更多的 slave 来解决,但是如果slave的复制全部从 master 复制,势必会加大 master 的复制IO的压力,所以就出现了级联复制,减轻 master 压力。原创 2024-02-17 23:05:56 · 1174 阅读 · 2 评论 -
MySQL 中 is null 和 =null 的区别
如果 set ANSI_NULLS为 ON 时,表示SQL语句遵循SQL-92标准;如果 set ANSI_NULLS 为 OFF 时,表示不遵从 SQL-92 标准。但SQL-92 标准要求对null的 = 或不等于 (!= ,) 比较取值都为 false,也就是 =null 或者 null,返回的都是false。null 在MySQL中不代表任何值,通过运算符是得不到任何结果的,因此只能用 is null(默认情况)MySQL 中 null 不代表任务实际的值,类似于一个未知数。原创 2024-02-17 22:54:32 · 867 阅读 · 0 评论 -
where查询条件的字段顺序打乱会影响命中索引吗?
答案是:不影响我们的where后边条件字段打乱会影响命中索引吗?先来进行下边的实验:可以看到实验结果,where条件字段顺序没有按照索引的字段顺序,依然不影响命中索引。因为Mysql中有查询优化器,会自动优化查询顺序。原创 2023-12-20 21:08:53 · 606 阅读 · 0 评论 -
MySQL删除会走索引吗
MySQL是关系型数据库管理系统的一种, 网站在进行数据的增删改查的时候,我们往往需要使用 MySQL 数据库。而删除操作就是在 MySQL 数据库中删除指定的数据或者表格的操作。原创 2023-12-19 23:08:54 · 315 阅读 · 0 评论 -
Linux中mysql 默认安装位置&Linux 安装 MySQL
MySQL在Linux系统上的默认安装位置是目录。这是MySQL服务器的数据目录,包含所有数据库文件。通过检查MySQL二进制文件的路径,我们可以确认MySQL是否正确安装。在目录中,MySQL使用一系列文件和子目录来组织和存储数据。确保理解MySQL数据目录的结构对于管理和维护MySQL数据库至关重要。按照顺序安装即可解决。原创 2023-12-16 16:08:04 · 7801 阅读 · 2 评论 -
mysql 查询列相同的数据
本文介绍了在MySQL数据库中查询列相同的数据的方法。通过使用GROUP BY语句结合HAVING子句,我们可以查询某一列中的重复数据。通过使用ORDER BY语句结合LIMIT子句,我们可以查询某一列中出现次数最多的数据。这些查询可以帮助我们找出重复的数据或者统计某一列中相同值的出现次数。原创 2023-12-10 13:39:04 · 482 阅读 · 0 评论 -
阿里终面:10亿数据如何快速插入MySQL?
要首先确认约束条件,才能设计方案。确定面试官主要想问的方向,例如1T文件如何切割为小文件,虽是难点,然而可能不是面试官想考察的问题。从数据规模看,需要分库分表,大致确定分表的规模。从单库的写入瓶颈分析,判断需要进行分库。考虑到磁盘对并发写的支持力度不同,同一个库多个表写入的并发需要限制。并且支持动态调整,方便在线上环境调试出最优值。存储引擎对写入性能支持不同,也要在线上对比验证数据库批量插入的最佳阈值需要反复测试得出。转载 2023-12-09 14:31:10 · 71 阅读 · 0 评论 -
数据库:MySQL、SqlServer、Oracle对比
软件体积小、速度快、免费开源;跨平台;因为是开源数据库,提供的接口支持多种语言连接操作;MySQL的核心程序是采用完全的多线程编程。并且是轻量级的进程,它可以灵活地为用户提供服务,而不过多的系统资源。MySql拥有一个非常灵活而且安全的权限和口令管理系统。当客户与MySql服务器连接时,他们之间所有的口令传送被加密,而且MySql支持主机认证;支持ODBC for Windows,支持所有的ODBC 2.5函数和其他许多函数,可以用Access连接MySql服务器,使得应用被扩展;原创 2023-12-03 16:33:37 · 785 阅读 · 0 评论 -
SELECT COUNT(*) 会造成全表扫描?回去等通知吧
从以上分析可以看出, MySQL 选择的执行计划未必是最佳的,原因有挺多,就比如上文说的行数统计信息不准,再比如 MySQL 认为的最优跟我们认为不一样,我们可以认为执行时间短的是最优的,但 MySQL 认为的成本小未必意味着执行时间短。本文通过一个例子深入剖析了 MySQL 的执行计划是如何选择的,以及为什么它的选择未必是我们认为的最优的,这也提醒我们,在生产中如果有多个索引的情况,使用 WHERE 进行过滤未必会选中你认为的索引,我们可以提前使用。在 MySQL 5.6 及之后的版本中,我们可以用。原创 2023-10-22 21:02:59 · 198 阅读 · 0 评论 -
【mysql】浮点类型
浮点类型浮点数和定点数类型的特点是可以处理小数,你可以把整数看成小数的一个特例。因此,浮点数和定点数的使用场景,比整数大多了。MySQL支持的浮点数类型,分别是。FLOAT表示单精度浮点数;DOUBLE表示双精度浮点数;REAL默认就是DOUBLE。如果把 SQL 模式设定为启用“”,那 么,MySQL 就认为REAL是FLOAT。如果要启用“”,可以通过以下 SQL 语句实现:FLOAT 和 DOUBLE 这两种数据类型的区别是什么?FLOAT占用字节数少,取值范围小;DOUBLE。原创 2023-09-09 22:48:56 · 3928 阅读 · 0 评论 -
MySQL数据类型及范围用法一览表
主要包括以下五大类:整数类型:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT浮点数类型:FLOAT、DOUBLE、DECIMAL字符串类型:CHAR、VARCHAR、TINY TEXT、TEXT、MEDIUM TEXT、LONGTEXT、TINY BLOB、BLOB、MEDIUM BLOB、LONG BLOB日期类型:Date、DateTime、TimeStamp、Time、Year。原创 2023-09-02 20:15:40 · 186 阅读 · 0 评论 -
MySQL分区表的正确使用方法,适用场景,建立分区的条件
MySQL 数据库中的数据是以文件的形势存在磁盘上的,默认放在目录下面,我们可以通过命令来查看:我们进入到这个目录下,就可以看到我们定义的所有数据库了,一个数据库就是一个文件夹,一个库中,有其对应的表的信息,如下:.frm.myi.myd*.frm:这个是表定义,是描述表结构的文件。*.myd:这个是数据信息文件,是表的数据文件。*.myi:这个是索引信息文件。如果存储引擎是InnoDB.frm.ibd*.frm:表结构文件。*.ibd:表数据和索引的文件。原创 2023-08-20 17:17:10 · 9165 阅读 · 1 评论 -
MySQL分区表
当数据库数据量涨到一定数量时,性能就成为我们不能不关注的问题,如何优化呢?常用的方式不外乎那么几种:1、分表,即把一个很大的表达数据分到几个表中,这样每个表数据都不多。优点:提高并发量,减小锁的粒度缺点:代码维护成本高,相关sql都需要改动2、分区,所有的数据还在一个表中,但物理存储数据根据一定的规则存放在不同的文件中,文件也可以放到另外磁盘上优点:代码维护量小,基本不用改动,提高IO吞吐量缺点:表的并发程度没有增加3、拆分业务,这个本质还是分表。优点:长期支持更好。原创 2023-08-19 17:18:43 · 125 阅读 · 0 评论 -
Mysql中 order by 多个字段排序
(4)若A用升序,B用降序,SQL该这样写:order by A ASC, B DESC;总结 MYSQL 多个字段排序时,可以为每个字段设置排序方式,当然 实际情况 大部分都是多个字段按照统一方式排序。(5)若A、B都用降序,必须用两个DESC,order by A DESC, B DESC;(3)order by 后可加2个(或多个)字段,字段之间用英文逗号隔开。以上的示例中,我们只使用了两个字段,下面使用三个字段验证一下这个规则。对比2次不同的查询,出现了不同的结果,这验证我们前期的推断是正确的。原创 2023-08-06 15:03:46 · 4264 阅读 · 0 评论 -
MySQL死锁产生的原因和解决方法
最近老顾经常碰到同事说,。今天我们就来聊聊死锁以及怎么解决。原创 2023-07-30 18:38:11 · 4365 阅读 · 0 评论 -
MySql 死锁
官方定义如下:两个事务都持有对方需要的锁,并且在等待对方释放,并且双方都不会释放自己的锁。这个就好比你有一个人质,对方有一个人质,你们俩去谈判说换人。你让对面放人,对面让你放人。共享锁(S Lock):允许事务读取一行数据,多个事务可以拿到一把S锁(即读读并行排他锁(X Lock):允许事务删除或更新一行数据,多个事务有且只有一个事务可以拿到X锁(即写写/写读互斥记录锁(LOCK_REC_NOT_GAP): lock_mode X locks rec but not gap。原创 2023-07-30 18:27:20 · 1086 阅读 · 0 评论 -
为啥不建议使用Select * ,原因有三点
举例 :给name字段 建索引, 查询的时候,只用到了 索引的字段,这就是索引覆盖。也就是直接通过查询索引,拿出来的数据就已经满足了查询返回的字段数据。无需额外其他查询操作了,也就是索引覆盖了。这样肯定快。如果初衷是查 name, 结果写成了select *, 变成查多了其他字段, 那其他字段不是索引,肯定无法触发索引覆盖使用场景了,也就是需要额外的回表查询操作了,那这样就慢了。回归正题,因为写成select *,变成查多了其他字段, 其他字段不是索引,导致回表,慢。转载 2023-07-22 16:30:33 · 1475 阅读 · 0 评论 -
Mysql加锁流程详解&MySQL 啥时候用表锁,啥时候用行锁?
前面已经给大家分享了Mysql中有哪些锁、锁的分类以及相互间的兼容性。本节继续分享Mysql的加锁流程。由于InnoDB引擎才支持行级锁,以下内容都是基于InnoDB引擎介绍。本文主要对Mysql加锁流程进行了详细说明。1、了解锁的内存结构,注意行锁是可以合并的,并不需要为每条记录都添加一个锁。2、熟悉根据主键查询加锁,根据二级索引查询加锁,以及不走索引的查询的加锁规律。3、通过data_locks表查看加锁信息。Innodb 啥时候用表锁,啥时候用行锁?表级锁包括:表锁、元数据锁、意向锁。原创 2023-07-15 12:02:49 · 4587 阅读 · 0 评论 -
MySQL锁机制详解
会话192.168.11.101(1)”给表locktab加了锁,其他会话的操作:1、可以对其他表(表locktab以外的表)进行读、写操作。2、对表locktab:读操作可以,写操作需要等待释放锁。原创 2023-07-15 11:40:56 · 3697 阅读 · 1 评论 -
一张图彻底搞懂 MySQL 的锁机制
锁在 MySQL 中是非常重要的一部分,锁对 MySQL 的数据访问并发有着举足轻重的影响。锁涉及到的知识篇幅也很多,所以要啃完并消化到自己的肚子里,是需要静下心好好反反复复几遍地细细品味。本文是对锁的一个大概的整理,一些相关深入的细节,还是需要找到相关书籍来继续夯实。原创 2023-07-15 11:18:24 · 400 阅读 · 2 评论 -
明明加了唯一索引,为什么还是产生重复数据?
前段时间我踩过一个坑:在。原创 2023-06-28 22:54:38 · 132 阅读 · 0 评论 -
12条 SQL 优化方案(非常实用)
一、SQL语句及索引的优化SQL语句的优化索引的优化/如何避免索引失效二、数据库表结构的优化:使得数据库结构符合三大范式与BCNF三、系统配置的优化四、硬件的优化在开始介绍如何优化sql前,先附上mysql内部逻辑图让大家有所了解主要负责跟客户端建立连接、获取权限、维持和管理连接优先在缓存中进行查询,如果查到了则直接返回,如果缓存中查询不到,在去数据库中查询。MySQL缓存是默认关闭的,也就是说不推荐使用缓存,并且在MySQL8.0 版本已经将查询缓存的整块功能删掉了。原创 2023-06-23 00:26:27 · 6325 阅读 · 0 评论 -
数据库性能优化方案
方案总览方案类型方案描述数据类型收益类型应对场景减少数据量数据序列化存储静态数据短期收益大数据量数据归档动态数据中期收益大数据量中间表生成静态数据长期收益大数据量、高负载分库分表动态数据长期收益大数据量、高负载用空间换性能分布式缓存静态数据短期收益高负载一主多从动态数据中期收益高负载选择合适的存储系统CQRS动态数据长期收益大数据量、高负载更换存储系统动态数据长期收益大数据量、高负载减少数据量用空间换性能选择合适的存储系统,原创 2023-06-22 23:41:18 · 138 阅读 · 2 评论 -
100w的数据表比1000w的数据表查询更快吗
当我们对一张表发起查询的时候,是不是这张表的数据越少,查询的就越快?答案是不一定,这和mysql B+数索引结构有一定的关系。转载 2023-06-18 23:17:19 · 142 阅读 · 0 评论 -
Mysql死锁问题如何排查和解决
发生死锁了,如何排查和解决呢?本文将跟你一起探讨这个问题准备好数据环境模拟死锁案发分析死锁日志分析死锁结果在分析死锁日志前,先做一下锁介绍,哈哈~最后,遇到死锁问题,我们应该怎么分析呢?模拟死锁场景查看死锁日志找出死锁SQLSQL加锁分析,这个可以去官网看哈分析死锁日志(持有什么锁,等待什么锁)熟悉锁模式兼容矩阵,InnoDB存储引擎中锁的兼容性矩阵。原创 2023-05-03 21:21:43 · 4394 阅读 · 0 评论 -
MySQL中的char和varchar&mysql中varchar能存多少汉字、数字,以及varchar(100)和varchar(10)的区别
长度的区别,char范围是0~255,varchar最长是64k,但是注意这里的64k是整个row的长度,要考虑到其它的 column,还有如果存在not null的时候也会占用一位,对不同的字符集,有效长度还不一样,比如utf8的,最多21845,还要除去别的column,但是varchar在一般 情况下存储都够用了。如果遇到了大文本,考虑使用text,最大能到4G。效率来说基本是char>varchar>text,但是如果使用的是Innodb引擎的话,推荐使用varchar代替char。原创 2023-03-13 22:45:44 · 11774 阅读 · 0 评论 -
Mysql什么情况下不走索引
今天领导在查询报表时,发现特别慢,于是引发一系列关于sql优化的工作,最终发现是分析同学在进行多表关联时进行不等值关联造成全表扫描,且使用字段无索引造成1W条数据表和20W数据表关联时执行缓慢。但是在MySQL中,并不是你建立了索引,并且你在SQL中使用到了该列,MySQL就肯定会使用到那些索引的,有一些情况很可能在你不知不觉中,你就“成功的避开了”MySQL的所有索引。原创 2023-03-04 17:10:45 · 1791 阅读 · 0 评论 -
MySQL数据库order by 主键(索引) 查询慢解决方案
通过以上的情况可以看出,MySQL默认的查询(没有where条件),不一定使用主键,由于MySQL的每一条简单查询只应用一个索引,所以,这个时候使用order by 主键,主键的索引功能失效。1、MySQL每天一条简单语句只应用一个索引,所以order by的字段要在索引之中,并且和where条件可以合并成组合索引。为了进一步确定,再对下面的sql语句执行查询计划:发现使用where条件后,索引变成了主键。今天遇到个奇葩的问题,应用主键排序速度奇慢无比,经过不懈的努力,终于找到了问题的原因。转载 2023-03-04 16:38:19 · 5024 阅读 · 1 评论 -
MySQL分区表详解
通常情况下,同一张表的数据在物理层面都是存放在一起的。随着业务增长,当同一张表的数据量过大时,会带来管理上的不便。而分区特性可以将一张表从物理层面根据一定的规则将数据划分为多个分区,多个分区可以单独管理,甚至存放在不同的磁盘/文件系统上,提升效率。对于应用来说,表依然是一个逻辑整体,但数据库可以针对不同的数据分区独立执行管理操作,不影响其他分区的运行。而数据划分的规则即称为分区函数,数据写入表时,会根据运算结果决定写入哪个分区。原创 2023-02-18 23:58:02 · 372 阅读 · 0 评论 -
Mysql分表和分区的区别、分库分表介绍与区别
什么是分表,从表面意思上看呢,就是把一张表分成N多个小表什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同一个磁盘上,也可以在不同的磁盘上。原创 2023-02-18 23:47:52 · 376 阅读 · 0 评论 -
MySQL分区表
随着MySQL越来越流行,Mysql里面的保存的数据也越来越大。在日常的工作中,我们经常遇到一张表里面保存了上亿甚至过十亿的记录。这些表里面保存了大量的历史记录。对于这些历史数据的清理是一个非常头疼事情,由于所有的数据都一个普通的表里。所以只能是启用一个或多个带where条件的delete语句去删除(一般where条件是时间)。这对数据库的造成了很大压力。即使我们把这些删除了,但底层的数据文件并没有变小。面对这类问题,最有效的方法就是在使用分区表。最常见的分区方法就是按照时间进行分区。原创 2023-02-18 23:44:54 · 360 阅读 · 0 评论 -
MySQL中DATE_FORMAT()函数的说明和简介
要将日期值格式化为特定格式,请使用。转载 2022-10-22 23:37:09 · 22406 阅读 · 1 评论 -
MySQL max_allowed_packet设置及问题
当你改变max_allowed_packet的值,你就改变了消息缓冲区的大小,你也应该在客户端允许的范围内修改客户端的buffer大小。在客户端,max_allowed_packet默认值是1GB。在MySQL5.0.84版本中,会话max_allowed_packet值,还只是只读的。在5.0.84之前的版本,设置会话中可以设置max_allowed_packet的值,但是没什么作用。包消息缓冲区初始化为net_buffer_length字节,但需要时可以增长到max_allowed_packet字节。转载 2022-10-21 22:58:15 · 2674 阅读 · 0 评论 -
你还在 Docker 中跑 MySQL?
容器的定义:容器是为了解决“在切换运行环境时,如何保证软件能够正常运行”这一问题。?认真分析大家的各种观点,发现赞同者仅仅是从容器优势的角度来阐述 MySQL 需要容器化,几乎没有什么业务场景进行验证自己的观点;反过来再看反对者,他们从性能、数据安全等多个因素进行阐述 MySQL不需要容器化,也举证了一些不适合的业务场景。之前推送过一篇文章:下面,我们就聊一下 Docker 不适合跑 MySQL 的 N 个原因!转载 2022-10-15 23:54:42 · 211 阅读 · 0 评论 -
MySQL中数据类型的长度问题解析
我存0.00给我实际存个0,我存14.00实际给我存个14,是都可以存浮点数,但是涉及到钱,金额这方面还是给我精准着来。回答:不是楞个回事,听我给你摆,首先长度,也就是INT(M),M指示最大显示宽度,不是说限制你只能插入规定长度的数据,如果不信你试一下:INT(1),你可以插数字1,也可以插100,1000。说白了就是你设定最大宽度,插入的数据不够大,就从填充0,给你填满,够大就随便你,不得管你。然后说CHAR,也就是固定长度了,比如密码,常见的MD5加密,就是CHAR(32)对吧,多了少了都不行。原创 2022-10-14 23:48:16 · 1037 阅读 · 0 评论