收藏本版 |訂閲

MySQL论坛 今日: 0|主題: 318|排名: 45 

  • MySQL 18 为什么这些SQL语句逻辑相同,性能却差异巨大?
    在MySQL中,有很多看上去逻辑相同,但性能差异巨大的SQL语句。对这些语句使用不当的话,就会不经意导致整个数据库压力变大。本文选择了三个这样的案例。 案例一:条件字段函数操作 假设现在维护了一个交易系统,其中交易记录表tradelog包含交易流水号(tradeid)、交易员id(operator)、交易时间(t_modified)等字段。建 ...
    020 笼中人 发表于 2025-7-20 MySQL论坛
  • MySQL 17 如何正确地显示随机消息?
    假设有一个场景,一个英语学习APP首页有一个随机显示单词的功能,用户每次访问首页的时候,都会随机滚动显示三个单词。 已知表里有10000条记录,来看看随机选择3个单词有什么方法,又存在什么问题。 建表语句: mysql> CREATE TABLE `words` ( `id` int(11) NOT NULL AUTO_INCREMENT, `word` varchar(64) DEFAULT ...
    0110 钢毅 发表于 2025-7-19 MySQL论坛
  • springboot~关系数据库索引和外键
    外键 同时更新,现时删除 约束更新,约束删除 索引 优化查询 添加外键后,自动为这个字段添加上索引 举例 用户主表 user_info 用户扩展信息 user_extension 项目表 project_info 理解表与表的关系 一对一 一对多 多对一 多对多 在关系数据库中,实体间的关联关系通过外键实现,JPA(Java Persistence API) ...
    022 余亦真情感专家 发表于 2025-7-18 MySQL论坛
  • MySQL 16“order by”是怎么工作的?
    假设要查询城市是“杭州”的所有人名字,并且按照姓名排序返回前1000个人的姓名与年龄。那么SQL语句可以写为: select city,name,age from t where city='杭州' order by name limit 1000; 本文主要想讨论这个语句是如何执行的,以及有什么参数会影响执行的行为。 全字段排序 在上面的查询语句中,为了避免全表扫描,需要 ...
    054 爱农种业 发表于 2025-7-17 MySQL论坛
  • MySQL 15 日志相关问题追问
    先放一下两阶段提交的图,在后续问题中会用到: 问题 在MySQL 02中,讲到为什么要使用两阶段提交时用的是反证法,说明了如果不使用两阶段提交,会导致MySQL出现主备数据不一致等问题。 那么如果在两阶段提交的不同瞬间,MySQL如果发生异常重启,是怎么保证数据完整性的呢? 如果在图中时刻A,也就是写入redo log后、写binl ...
    069 武神龙 发表于 2025-7-16 MySQL论坛
  • GreatSQL优化技巧:使用 FUNCTION 代替标量子查询
    GreatSQL优化技巧:使用 FUNCTION 代替标量子查询 导语 本文案例涉及标量子查询,何为标量子查询呢?一般来说,介于 SELECT 与 FROM 之间的子查询就叫标量子查询,返回单行单列结果,可做为最外层 SELECT 结果集的一列。 举个例子: SELECT e.employee_name, (SELECT dept_name FROM hr_dept d WHERE d.dept_id=e.dept_id) ...
    078 一装到底 发表于 2025-7-16 MySQL论坛
  • MySQL 14 count(*)这么慢,我该怎么办?
    count(*)的实现方式 在不同的MySQL引擎中,count(*)有不同的实现方式: MyISAM引擎把一个表的总行数存在磁盘上,执行count(*)时能直接返回总行数,效率很高; InnoDB引擎需要把数据一行一行从引擎里读出来,然后累积计数。 需要说明,本文讨论没有过滤条件的count(*),如果加了where条件,MyISAM也没有那么快。 InnoD ...
    047 张爱珍 发表于 2025-7-14 MySQL论坛
  • linux备份mysql到另一个linux,异地定时备份
    163,备份服务器 165,mysql服务器 使用NFS文件共享 ubuntu系统 mysql8 首先确认服务器版本 uname -a 或者 uname -r 确认为ubuntu系统 安装nfs nfs分为服务端(实际文件储存的服务器163)和客户端(存入者165) 服务端 sudo apt update && sudo apt install nfs-kernel-server 客户端 sudo apt update && ...
    034 吴玉兴 发表于 2025-7-14 MySQL论坛
  • MySQL 13 为什么表数据删掉一半,表文件大小不变?
    一个InnoDB表包含两部分:表结构定义和数据。在MySQL 8.0版本前,表结构存在以.frm为后缀的文件里。之后的版本允许把表结构定义放在系统数据表中。由于表结构定义占用空间很小,所以主要讨论表数据。 接下来,先说明为什么简单删除表数据达不到表空间回收的效果,再介绍正确回收空间的方法。 参数innodb_file_per_table 表 ...
    078 蒋明明 发表于 2025-7-13 MySQL论坛
  • MySQL 12 为什么我的MySQL会“抖”一下?
    一条SQL语句,正常执行时候特别快,但有时会变得特别慢,且这种情况很难复现,随机且持续时间很短,看上去像是“抖”了一下。 你的SQL语句为什么变“慢”了 在MySQL 02中,介绍了WAL机制,InnoDB在处理更新语句时,更新内存写完redo log后,就返回给客户端,本次更新成功。 而内存里的数据最后要写入磁盘,这个操作称为flus ...
    0103 火眼看世界 发表于 2025-7-12 MySQL论坛
  • MySQL 11 怎么给字符串字段加索引?
    场景引入 假设现在维护一个支持邮箱登录的系统,用户表定义如下: create table SUser(ID bigint unsigned primary key,email varchar(64), ... )engine=innodb; 由于登录方式为邮箱,那么一定会有下面这样的业务: select f1,f2 from SUser where email='xxx'; 对于上述语句,可以不对email字段加索引,也可以对email建 ...
    037 翠美人生 发表于 2025-7-11 MySQL论坛
  • JDBC游标读不生效导致OOM问题排查分析
    JDBC游标读不生效导致OOM问题排查分析 问题描述 程序使用游标读分批读取MySQL的数据,但是程序容器却发生OOM 基本信息 MySQL版本:8.0.25 JDBC版本:8.0.25 JDBC配置: connectionProperties=useUnicode=true;autoReconnect=true;defaultFetchSize=800;useServerPrepStmts=false;rewriteBatchedStatements=true;useCompress ...
    035 广播 发表于 2025-7-11 MySQL论坛
  • MySQL 10 MySQL为什么有时候会选错索引?
    场景引入 我们知道,MySQL中一张表可以支持多个索引。但是写SQL语句时,并没有主动指定使用哪个索引,而是由MySQL来确定。而有时候,MySQL会选错索引,导致执行速度变得很慢。 举个例子,假设一张表里有(id,a,b)三个字段,并分别建立索引。然后往表中插入10万行记录,取值依次递增,即数据从(1,1,1)一直到(100000,100000,10 ...
    029 君宝宝 发表于 2025-7-10 MySQL论坛
  • MySQL 09 普通索引和唯一索引,应该怎么选择?
    唯一索引:字段值不能重复。 普通索引:字段值可以重复。 假设数据如下图,且字段k上的值都不重复: 接下来,从两种索引对查询语句和更新语句的性能影响来分析。 查询过程 假设查询语句为select id from T where k=5。那么首先会在字段k的索引树上找到k=5所在的数据页,然后在数据页内二分查找记录。对于普通索引和唯一索 ...
    0100 深夜风尘 发表于 2025-7-9 MySQL论坛
  • MOD函数索引实战:解决百万级数据分批处理性能瓶颈
    MOD函数索引实战:解决百万级数据分批处理性能瓶颈 问题背景 GreatSQL的MOD函数,大家应该都不陌生,使用MOD函数创建函数索引,是不是很少有人这么用呀,下面听我讲讲使用MOD函数创建函数索引的故事吧。 故事的引子呢,是有这么一个使用场景,为了忽略客户真实的业务,对涉及的表只保留了别名。 SELECT g.* FROM g ...
    060 龙嬴家晔 发表于 2025-7-9 MySQL论坛
  • INNER JOIN, LEFT JOIN, RIGHT JOIN 的区别
    今天我们来一起探索下 JOIN,JOIN 作为数据库操作的核心概念,用于合并两个或多个表中的数据。 一、JOIN (INNER JOIN) 1、基本功能:返回两个表中匹配成功的行。 2、特点: 只保留两表中都满足连接条件的记录; 如果某行在一个表中存在但在另一个表中没有匹配项,则该行不会出现在结果中; 结果集的行数 ≤ 两个原表 ...
    018 小淦妈妈 发表于 2025-7-8 MySQL论坛
  • MySQL 08 详解read view:事务到底是隔离的还是不隔离的?
    场景引入 我们知道,在可重复读的隔离级别下,一个事务A启动的时候会创建一个read view,之后在这个事务A执行期间,即使其他事务修改数据,事务A看到的仍然和启动时相同。 考虑一个问题,假如该事务A想要对一行做更新,而此时这行的行锁被其他事务B持有,那么事务A会被锁住而等待行锁。当事务A获取到行锁想要查询或更新时, ...
    063 贱来 发表于 2025-7-8 MySQL论坛
  • MySQL 07 行锁功过:怎么减少行锁对性能的影响?
    行锁是针对数据表中行记录的锁,是在引擎层由引擎实现的。 从两阶段锁说起 在InnoDB事务中,行锁是在需要的时候才加上的,但并不是不需要了就立即释放,而是等到事务结束时才释放,这就是两阶段锁协议。 知道这个设定后,如果事务中需要锁多个行,要把最可能造成锁冲突、最可能影响并发度的锁尽量往后放。 举个例子,假设有 ...
    016 不是数的澍 发表于 2025-7-7 MySQL论坛
  • MySQL 06 全局锁和表锁:给表加个字段怎么有这么多阻碍?
    根据加锁的范围,MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类,本文先讨论前两种。 全局锁 全局锁是对整个数据库实例加锁,MySQL提供的加全局读锁的命令是Flush tables with read lock(下面简称FTWRL)。当需要让整个库处于只读状态时,可以使用这个命令,之后其他线程的以下语句会被阻塞:数据的增删改、数据定义 ...
    028 诺不轻许 发表于 2025-7-6 MySQL论坛
  • MySQL 05 深入浅出索引(下)
    覆盖索引 假设要执行一条语句: select * from T where k between 3 and 5; 初始对列k建立了索引,表中数据为: 那么其执行流程为: 在k索引树上找到k=3的记录,取得ID=300; 到ID索引树查到ID=300对应的记录。 在k索引树上找到下一个值k=5的记录,取得ID=500; 到ID索引树查到ID=500对应的记录。 在k索引树上 ...
    039 林先 发表于 2025-7-6 MySQL论坛
  • 下一頁 »

    快速發帖

    還可輸入 180 個字符
    您需要登錄後才可以發帖 登錄 | 立即注册

    本版積分規則

    相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

    Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

    在本版发帖返回顶部