Mysql
文章平均质量分 63
WannaRunning
这个作者很懒,什么都没留下…
展开
-
Mybatis集成MySQL使用游标查询处理大批量数据
随着用户量的上升表数据已经上千万,每天扫描处理的数量也超百万,limit分页出现了慢sql,任务执行时间也达不到预期了。上述方案出现瓶颈后考虑放弃limit方案,使用游标的方式进行全量数据的获取,这样一来SQL执行快任务执行也快。在设置了useCursorFetch=true后,需要在SQL中指定fetchSize,即一次获取的数据量。基于数据的时间范围查询,给符合条件的用户推送积分即将到期的提醒。下面是基于上面的SQL做大量数据查询后写入文件的代码示例。原创 2024-01-18 15:49:50 · 1116 阅读 · 0 评论 -
JDBC参数之allowMultiQueries
其实allowMultiQueries参数是一个比较基础的参数,见名知意 支持多SQL执行的参数。原创 2023-11-23 14:49:35 · 1319 阅读 · 0 评论 -
MySQL的排序规则COLLATE
简而言之,COLLATE会影响到ORDER BY语句的顺序,会影响到WHERE条件中大于小于号筛选出来的结果,会影响 DISTINCT、GROUP BY、HAVING语句的查询结果。另外,MySQL建索引的时候,如果索引列是字符类型,也会影响索引创建,只不过这种影响我们感知不到。关键字,查询语句也是大小写敏感的。在此基础上创建的 name 相关的索引也是大小写敏感的,也就能够使用索引来提高性能。BINARY不是函数,是类型转换运算符,它用来强制它后面的字符串为一个二进制字符串,可以理解为在。原创 2023-02-04 17:25:36 · 892 阅读 · 0 评论 -
浅谈MySQL排序原理和有效使用索引进行排序
Mysql中对于排序的实现有两种方式:文件排序(FileSort)和扫描索引排序。当使用索引实现排序时使用的就是后者排序方式,非索引排序的情况使用的就是文件排序。原创 2022-09-19 18:01:25 · 853 阅读 · 0 评论 -
MySQL常用函数
mySql常用的函数原创 2022-09-19 16:54:10 · 154 阅读 · 0 评论 -
使用安全的方式对MySQL生产数据做变更
历史原因导致最近接手的项目比较烂,线上问题频发天天做线上数据修正,参考公司规范记录一下怎样安全的实现数据变更,即有备份可以完整恢复。首先,线上环境要创建一个备份数据库backup,用于变更数据时创建备份表。数据备份对要变更的数据表t_order做备份,并对要变更的数据记录做备份(id为1和2的两条记录)CREATE TABLE backup.t_order_20220309 LIKE t_order; INSERT INTO backup.t_order_20220309 SELE原创 2022-03-09 22:17:11 · 805 阅读 · 0 评论 -
MySQL-LOCATE和FIND_IN_SET函数
假设categoryId是查询参数值,categoryIdStr是数据库字段,是多个数字中间用逗号隔开locate函数返回目标字符在匹配字段中出现的位置,结果大于0则为匹配到结果。如果查询参数categoryId是4,categoryIdStr的值是 2,3,14,15则可以匹配到。SELECT product_code FROM t_product_base_info where locate(#{categoryId},categoryIdStr)find_in_set函数会以每原创 2021-12-30 20:59:51 · 1135 阅读 · 0 评论 -
浅谈Mysql的哈希索引及特点
目录哈希索引哈希索引的特点哈希索引的性能InnoDB中的自适应哈希索引InnoDB自适应哈希索引开关在InnoDB存储引擎中一般使用的是B+树索引。其实mysql中还有另一种常见的索引即哈希索引;在Memory存储引擎中就支持哈希索引,同时在InnoDB存储引擎中也支持自适应哈希索引,可以与B+树索引共同使用哈希索引数据库中哈希索引是基于哈希表实现的,对于哈希索引列的数据通过 Hash 算法计算,得到对应索引列的哈希码形成哈希表,由哈希码及哈希码指向的真实数据行的指针组...原创 2021-10-21 22:35:42 · 492 阅读 · 0 评论 -
MySQL执行过程
用一条 SQL SELECT 语句的执行轨迹来说明客户端与 MySQL 的交互过程,如下图所示。通过客户端/服务器通信协议与 MySQL 建立连接。 查询缓存,这是 MySQL 的一个可优化查询的地方,如果开启了 Query Cache 且在查询缓存过程中查询到完全相同的 SQL 语句,则将查询结果直接返回给客户端;如果没有开启Query Cache 或者没有查询到完全相同的 SQL 语句则会由解析器进行语法语义解析,并生成解析树。 预处理器生成新的解析树。 查询优化器生成执行计划。 查询执行引原创 2021-10-20 22:15:56 · 124 阅读 · 0 评论 -
使用CASE WHEN实现批量UPDATE
场景是这样的:有多条记录需要更新,但是每一条记录更新的值都不同,这时候最简单的方式就是单独更新每一条记录。如果要提高效率,可以使用case when then结合 where 条件更新指定的多条记录<update id="UpdateByIds" parameterType="java.util.List"> update order_item set num_value = <foreach collection="list" item="item" index="inde原创 2021-06-29 11:31:24 · 3698 阅读 · 0 评论 -
MySQL中InnoDB引擎下的死锁问题
死锁的出现如果是表级锁的情况下是不会出现死锁的,也就是说MyIsam引擎中不会发生死锁,死锁主要出现在InnoDB引擎中使用行级锁的情况。InnoDB引擎下 出现死锁的关键就是多个session加锁的顺序不一致。InnoDB下的表级锁InnoDB中如果是执行insert语句使用的是表级锁,因此insert操作不会出现死锁问题; 如果执行select查询语句没有走主键和辅助索引使用的也是表级锁,这种操作也不会出现死锁问题。InnoDB下的行级锁基于当前读(for upda.原创 2021-04-01 09:45:03 · 415 阅读 · 0 评论 -
MySQL备份
备份方式(类型)热备备份过程中读写操作均可执行,innodb存储引擎可以实现,在导出数据之前,开启一个事务,由数据库保证单次导出数据的一致性,此时针对Innodb表的所有读写操作,均不会被阻塞。温备读操作可执行,写操作不可执行冷备停止MySQL实例的运行,整个备份过程中,用户均无法访问数据库,读写操作均不可进行。备份工具的选择mysqldump+复制binlogmysqldump:完全备份;复制binlog中指定时间范圈的event:增量备份:lvm2快照+复原创 2021-03-11 10:44:03 · 73 阅读 · 0 评论 -
Mysql线上库进行DDL操作
目录MySQL5.6之前版本MySQL5.6及5.6之后的版本online DDL在线DDL的方式执行时一定不会锁表么?ALGORITHM参数LOCK参数online DDL的执行过程面试会问到的一个问题:有一张千万级数据表,要增加一个字段,如何操作,需要注意什么问题?这个问题要区分mysql的版本,5.6版本之前是一种方式,5.6及以后的版本是另一种实现方式。MySQL5.6之前版本首先了解一下当前版本中InnoDB引擎下DDL操作的过程按照原始表(o原创 2021-03-08 15:40:45 · 218 阅读 · 1 评论 -
MySQL锁等待和死锁及处理方式
mysql中锁表导致的报错可以找到正在执行的导致锁表的进程,kill 掉进程即可解决。查看当前正在执行的的事务SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;一般情况下长期处于RUNNING状态的进程基本就是导致锁表的进程。例如该事务进程涉及多个SQL语句执行,执行到一半时遇到其他事务正在修改同一个表,这时候该进行就会LOCK WAIT,如果这个过程时间太长等待超时了,那这个进程就会长期处于RUNNING,对于没有执行的SQL对应的表时没有影响的,但是.原创 2021-02-22 14:51:39 · 309 阅读 · 0 评论 -
InnoDB引擎中B+树索引创建和使用
创建语法:ALTER TABLE 表名ADD INDEX 索引名(字段名(大小));ALTER TABLE oauth_client_details ADD INDEX clientIdScope(client_id(10),scope(10));Mysql中分为单索引,联合索引。单索引就是一个字段的索引;联合索引就是多个列组合成索引。联合索引在结构其实是一个索引名称 关联了 多个 单索引(由每个字段创建的) 。查看当前表索引语法:SHOW INDEX FROM 表名称;sh.原创 2021-02-10 10:24:41 · 199 阅读 · 1 评论 -
Mysql中join连接算法和优化思路
Index Nested-LoopJoin这个算法关键在于检索过程中可以使用被驱动表的索引。Index Nested-LoopJoin算法是join连接最优的join算法,如果使用join查询尽量使sql按照此算法执行才能保证性能。举例说明如果B表的NO字段是索引字段,那么查询过程可以用上被驱动表的索引,使用Index Nested-LoopJoin算法。SELECT * FROM A INNER JOIN B ON A.ID=B.NO1. 从表A中读入一行数据 R;2. 从数.原创 2021-01-19 23:37:31 · 697 阅读 · 0 评论 -
浅谈Mysql存储结构和B+树索引及其实现原理
根据Mysql的存储结构可以知道mysql数据库I/O操作的最小单位是页,即不论读一行还是读多行,都是将这些行所在的页进行加载,与数据库相关的内容都会存储在页的结构里。二叉树二叉树是一种二分查找树,有很好的查找性能,相当于二分查找。但是当N比较大的时候,树的深度比较高。数据查询的时间主要依赖于磁盘IO的次数,二叉树深度越大,查找的次数越多,性能越差。最坏的情况是退化成了链表,这其实也是HashMap中不使用二叉树而是使用红黑树的原因。B树B树简单地说就是多叉树,每个叶子会存储数据,和指向原创 2021-01-19 11:12:46 · 186 阅读 · 0 评论 -
Mysql主从集群之MySQL的二阶段提交机制
之前的文章写了Mysql中的几种日志和作用,MySQL中经常说的WAL技术,WAL的全称是Write- Ahead Logging,它的关键点就是先写日志,再写磁盘。即当有一条记录需要更新时,InnoDB引擎就会先把记录写到redo log里,并更新内存,这个时候更新就完成了。因为如果每一次的更新操作都需要写进磁盘,然后磁盘也要找到对应的那条记录,然后再更新,整个过程IO成本、查找成本都很高。例如在执行一条update语句时候,处理流程为:首先把数据写入内存,写入redo log,状态为prepare—原创 2021-01-11 17:38:40 · 417 阅读 · 1 评论 -
Mysql的几种日志
目录redo logbin logrelay logslow query loggeneral query logerror logredo logredo log属于MySQL中InnoDB存储引擎的事务日志。一般情况下宕机重启后redo log可以恢复Buffer缓存中没有持久化到磁盘的数据。由于MySQL的数据是存放在磁盘中的,每次读写数据都需做磁盘IO操作,如果并发场景下性能就会很差。所以MySQL中提供了一个优化手段,引入缓存Buffer Pool。缓存中.原创 2021-01-08 16:38:58 · 205 阅读 · 0 评论 -
liunx下mysql安装
经常在按在安装的时候遇到莫名的错误,总结后安装步骤如下:1, 下载mysql for linux 64找到对应的 rpm-bundle.tar包进行下载(centos基于Red Hat)2, 卸载mariadb(因为centos默认带有mariadb数据库)(reference :http://blog.csdn.net/xizaihui/article/details/53041...原创 2018-08-16 19:03:30 · 369 阅读 · 0 评论 -
事务隔离级别MVCC实现与悲观锁乐观锁
目录四种事务的隔离级数据库默认隔离级别为什么要使用悲观锁和乐观锁悲观锁乐观锁事务的隔离级(Isolation Level),就是在数据库事务中,为保证并发数据读写的正确性。四种事务的隔离级串行读 >可重复读 >已提交读 >未提交读1、未提交读(Read Uncommitted):允许脏读,也就是可能读取到其他会话中未提交事务修改的数据。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少2、已提交读(Read Committed...原创 2020-12-29 11:37:15 · 262 阅读 · 0 评论 -
centos强制重启后mysql启动失败
由于强制重启后mysql的pid丢失导致启动失败。1.进入/etc/my.cnf.d文件查看pid的目录位置log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid上面的内容表示启动日志目录和pid目录,本次出现的问题就是pid丢失问题。2.进入/var/run目录下,创建mysqld目录mkdir /var/run/mysqld3.授权目录权限chown mysql.mysql /var/run/原创 2020-06-24 22:38:04 · 958 阅读 · 0 评论 -
mycat相关的配置
在mycat的bin目录下时启动相关的命令,而在conf目录下则是配置相关的文件。目录下文件如下[root@instance-d6rdm793 mycat]# cd conf/[root@instance-d6rdm793 conf]# ls -ltotal 108-rwxrwxrwx 1 mycat mycat 88 Jan 22 2018 autopartition-long...原创 2020-04-09 22:44:27 · 145 阅读 · 0 评论 -
Mycat安装启动
mysql读写分离的实现方式有很多,一般分为代码配置和使用中间件,下面列举几个常用的方法:1.配置多个数据源,根据业务需求访问不同的数据,指定对应的策略:增加,删除,修改操作访问对应数据,查询访问对应数据,不同数据库做好的数据一致性的处理。由于此方法相对易懂,简单,不做过多介绍。2. 动态切换数据源,根据配置的文件,业务动态切换访问的数据库:此方案通过Spring的AOP,AspactJ来实现...原创 2020-04-09 22:35:16 · 520 阅读 · 0 评论 -
mysql查询及索引使用上的相关优化
Mysql中分为单索引,联合索引。单索引就是一个字段的索引;联合索引就是多个列组合额索引。联合索引遵循最左匹配的原则:必须先匹配到左侧的列,才能匹配右侧的列。例如,创建一个name,age两个列的联合索引,那么在sql查询匹配中:where name=? and age= ? 可以走索引where name= ? 可以走索引where age = ? 不能走索引wher...原创 2020-04-06 20:08:06 · 171 阅读 · 0 评论 -
Mysql存储引擎
Mysql中支持多种存储引擎: MyIsam , InnoDB,Mrg_Myisam, Memory, Blackhole, CSV, Performance_Schema, Archive, Federated首先要明确的是,存储引擎跟mysql服务的实现没有关系,各种引擎是以插件的形式存在于mysql中的。存储引擎其实是对于表来讲的,但是开发中通常不会每个表...原创 2020-03-18 16:00:21 · 93 阅读 · 0 评论