MySQL way to explore https:https://cdn.v2ex.com/navatar/7f39/f831/61_normal.png?m=1659331290 https:https://cdn.v2ex.com/navatar/7f39/f831/61_large.png?m=1659331290 2025-09-11T13:02:45Z Copyright © 2010-2018, V2EX count 的语句优化问题 tag:www.v2ex.com,2025-09-11:/t/1158628 2025-09-11T11:02:45Z 2025-09-11T13:02:45Z supersf member/supersf
select count(*) from
(select a,b,count(distinct c) from table group by a,b having count(distinct c)>=2) as t

把 mysql 库跑死掉了

请教下有什么可以优化的空间?
目前想到的是下面

select count(*) from
(select a,b from table group by a,b having count(distinct c)>=2) as t ]]>
连接 MySQL 很慢的问题 tag:www.v2ex.com,2025-08-28:/t/1155626 2025-08-28T12:19:20Z 2025-08-28T12:19:20Z macwhirr member/macwhirr mysql 安装在 Linux 上, 在一次突然断电后,局域网内的的其它机器连接( jdbc )这个数据库就需要很长时间才能连接上,连上之后查询数据却很快,这可能是哪的原因?

]]>
MYSQL UPDATE 在很短的时间内更新相同的语句,就会有告警,导至事务失败,有没有人遇到这问题? tag:www.v2ex.com,2025-08-26:/t/1155131 2025-08-26T14:26:07Z 2025-08-27T09:48:57Z Alucns member/Alucns
如:UPDATE `api_wallet` SET `credits`=`credits`+'1087.77', `cost`=`cost`+'151.23' WHERE `uid`='12';
Rows matched: 1 Changed: 1 Warnings: 1
mysqli_warning Object
(
[message] => Data truncated for column 'credits' at row 1
[sqlstate] => HY000
[errno] => 1265
) ]]>
MySQL 磁盘读取飙升,导致阿里云服务器卡死 tag:www.v2ex.com,2025-08-26:/t/1155028 2025-08-26T06:34:35Z 2025-08-27T19:56:15Z JiangZeYi member/JiangZeYi 问题

MySQL 是跑在 Docker 上,在某段时间内 MySQL 磁盘读取飙升,导致服务器卡死。

这是因为查询扫描行数过多导致的磁盘读取飙升吗?还是有其他原因。

磁盘读取飙升的问题该如何得到解决?优化查询 SQL ?换阿里云的 RDS ?

有大佬能解答下吗?

服务器配置

实例规格:ecs.c8i.xlarge

CPU:4 核 vCPU

内存:8G

磁盘:ESSD P1 40G

MySQL 配置

[mysqld] slow_query_log=ON long_query_time=3 innodb_buffer_pool_size = 1536M innodb_log_file_size=256M innodb_log_buffer_size=32M 

相关截图

阿里监控:

Po7PFJD

ATOP ( 10 分钟):

NqFgFWr

QLD3fDs

慢 SQL 日志:

yHquwHg

]]>
求 Macos 下面 homebrew 安装 mysql 到指定目录的方法 tag:www.v2ex.com,2025-08-12:/t/1151931 2025-08-12T13:21:12Z 2025-08-13T08:36:01Z hwhtj member/hwhtj 如何想办法把 mysql 安装到如/Users/用户/Library/phpWebstudy/app/mysql 这样的目录中
使用 brew install mysql@ver --prefix=/Users/用户/Library/phpWebstudy/app/mysql
提示"invalid option: --prefix=/Users/hwhsome/Library/phpWebstudy/app/mysql"

说明 brew install 命令没有--prefix 这个选项 ]]>
使用 EXISTS 优化 IN 子查询 tag:www.v2ex.com,2025-07-10:/t/1144270 2025-07-10T07:06:03Z 2025-07-10T12:24:15Z xhwdt member/xhwdt mysql8 IN 和 EXISTS 子查询会自动转化为 join 或者 semi-join ,为什么 IN 查询还需要 EXISTS 策略优化? 除了有聚合 HAVING 这个不能转 join 的确实用 EXISTS 比较好,其他的好像优化器转化后用 show warnings 看 IN 和 EXISTS 语句是一样的。那这篇到底在讲啥?
https://dev.mysql.com/doc/refman/8.0/en/subquery-optimization-with-exists.html ,还是说我理解错了。

]]> 什么时候可以将 mysql 默认隔离机制改为读已提交 tag:www.v2ex.com,2025-07-07:/t/1143515 2025-07-07T06:49:56Z 2025-07-13T18:11:27Z byerer member/byerer 新业务需要在事务中使用乐观锁,在 RR 下需要回滚重试整个事务,而 rc 只需要重试某一个更新,有必要改成 rc 吗,如何判断业务在满足什么条件下可以不依赖 rr ,是不是只要不依赖可重复读就行

]]>
跨平台的 MySQL Parser tag:www.v2ex.com,2025-06-30:/t/1142073 2025-06-30T12:17:45Z 2025-06-30T18:08:36Z abbychau member/abbychau
事情是這樣的:TiDB 的 MySQL 解析器是目前最兼容 MySQL 的解析器了,但它要完美運行, 要依賴一個叫 "parser\_driver" 的包。Parser Driver 裡面有 TiDB 的類型,但 TiDB 官方貌似不打算把這些跟 TiDB 糾纏很深的 MySQL 類型單獨拆出來做成獨立的 Go 包。GitHub issue: 16381

我覺得 TiDB 現在就是把所有開源模組全部混在一起,搞成一個 opininated monolith 。

我在把 MIST 移植到 WASM 的時候,TiDB 的系統調用會被莫名其妙地包進來一起編譯,結果在編譯 WASM 的時候靜態鏈接就掛了。

所以我花了幾天把現有的 parser 包和 parser driver 給拆出來,把那些糾纏不清的 TiDB 類型重新整理成一個真正能用的 MySQL 解析器 Go 包,這個包可以跨平台編譯,也能移植到 WASM 。

代碼庫: https://github.com/abbychau/mysql-parser
在線解析器演示: https://abbychau.github.io/mysql-parser/ ]]>
MySQL 大表排序有什么好的方案?只能上 Mongo? tag:www.v2ex.com,2025-06-28:/t/1141637 2025-06-28T06:05:10Z 2025-06-29T20:39:27Z CooperB member/CooperB 大家对大表的排序是怎么优化的?目前业务上没法优化,只能查全量数据且需要根据多个字段排序,是不是只能通过 Mongodb 了?

]]>
Mysql 无法修改自增主键的 AUTO_INCREMENT 值 tag:www.v2ex.com,2025-06-15:/t/1138738 2025-06-15T15:40:30Z 2025-06-16T11:58:46Z WilliamColton member/WilliamColton 之前在使用 Mybatis plus 的时候使用了主键生成策略 IdType.ASSIGN_ID ,

新增行的主键值都特别大,然后就改成了数据库的自增策略,

但是新增行的 id 还是特别大,一看原来是 AUTO_INCREMENT 的值变成了 1933814216852774914 ,

然后听了 gpt 的使用 ALTER TABLE 表名 AUTO_INCREMENT = 1 命令去修改其值,

但是改完了一看 AUTO_INCREMENT 还是特别大,也没找到什么说明文档🥹

故来求教各位 v 友

]]>
升级服务器后, mysql 性能反而更慢了,求排查思路 tag:www.v2ex.com,2025-06-13:/t/1138433 2025-06-13T08:22:54Z 2025-06-18T20:52:06Z danaesoziommw49 member/danaesoziommw49 升级后是 华为 2288H-V5 金牌 6133*2 40C64G
测试两台设备磁盘读写都是 500MB/s 左右,网络也都是 1G 。
---
但是新的机器查询比原机器更慢一倍,explain 输出结果又是一样的。
13w 数据的表,limit 500 都要 5 秒。
求排查思路。 ]]>
《高性能 MySQL》第三版:是否已经过时? tag:www.v2ex.com,2025-06-01:/t/1135741 2025-06-01T11:58:01Z 2025-06-03T04:01:19Z ZimaBlueee member/ZimaBlueee 5 年 Java 后端开发,一直没深入学习过 MySQL ,平时只是使用,不了解 MySQL 原理或者性能优化。

搜了下看到很多人推荐《高性能 MySQL 》这本书,但发现几个问题:

请问有读过的 V 友推荐一下现在学习 MySQL 该读哪本书籍,或者哪个老师的视频呢?

跪求解答!

]]>
坑爹的字符集问题:踩到了 MySQL 的 bug tag:www.v2ex.com,2025-05-22:/t/1133409 2025-05-22T00:33:27Z 2025-05-22T17:00:06Z mikewang member/mikewang 昨天的 /t/1133223 吸引了大家不少的讨论,今天我来说一个工作上遇到的问题。

准确地说,这个问题是 MySQL 字符集中的校对规则出了 BUG ,字符集本身是无辜的。

这个 bug 现在都还在,欢迎大家验证哈。


故事是这样的。

同事在连 MySQL 库做测试时发现了一个诡异的现象:查不到匹配的数据。

相关语句简化如下(主键等字段已省略):

create table t1 ( c1 varchar(16), key idx (c1) ) collate=utf8mb4_bin; insert into t1 values ('000\n'), ('123\n'), ('abc\n'); select * from t1 where c1 like 'abc%'; 

这怎么看,都应该匹配出 'abc\n',对吧?

事实情况是:

mysql> select * from t1 where c1 like 'abc%'; Empty set (0.00 sec) 

天塌了,查出来竟然是空的。

然后我拿同样的语句在 OceanBase 上跑了一下,竟然也是空。(两眼一黑)


可能会有人说,那肯定是你写的语句有问题,或者 utf8mb4_bin 就这样,吧啦吧啦。

那如果这样呢:

mysql> alter table t1 drop index idx; Query OK, 0 rows affected (0.001 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> select * from t1 where c1 like 'abc%'; +------+ | c1 | +------+ | abc | +------+ 1 row in set (0.001 sec) 

哎,索引删了就好了。

总不能说,加个索引,能把结果集搞没吧。那肯定 bug 了。


那到底是咋回事呢:带上索引,我们 explain 看一下。

mysql> explain format=tree select * from t1 where c1 like 'abc%' \G *************************** 1. row *************************** EXPLAIN: -> Filter: (t1.c1 like 'abc%') (cost=0.46 rows=1) -> Covering index range scan on t1 using idx over ('abc' <= c1 <= 'abc?????????????') (cost=0.46 rows=1) 1 row in set (0.001 sec) 

原来这个前置匹配,因为有索引,优化为了范围查询。后面的一串 ? 其实是 0xff,没什么问题。

那看下 'abc\n''abc' 呢?

mysql> set collation_cOnnection=utf8mb4_bin; Query OK, 0 rows affected (0.000 sec) mysql> select 'abc\n' < 'abc'; +-----------------+ | 'abc\n' < 'abc' | +-----------------+ | 1 | +-----------------+ 1 row in set (0.000 sec) 

再次两眼一黑。我倒,怎么会这样。这是什么排序规则。看下 utf8mb4_bin 吧。

mysql> show collation like 'utf8mb4_bin'; +-------------+---------+----+---------+----------+---------+---------------+ | Collation | Charset | Id | Default | Compiled | Sortlen | Pad_attribute | +-------------+---------+----+---------+----------+---------+---------------+ | utf8mb4_bin | utf8mb4 | 46 | | Yes | 1 | PAD SPACE | +-------------+---------+----+---------+----------+---------+---------------+ 1 row in set (0.001 sec) 

Pad_attributePAD SPACE,表示对齐长度时,后面补空格。这下就说通了。空格是 0x20,换行符是 0x0a\n 小。

所以!!虽然反直觉,在 utf8mb4_bin 下,'abc\n' 就是 'abc' 小!

结论:like 'abc%' 的范围查询优化有问题。


关于这个 bug ,我已经向 MySQL 提交了 patch ,但是似乎没有得到关注。我看了下更新日志,我提的另一个 patch 已经被合入,但是这个问题依然还在。看来涉及到字符集,这个坑麻烦到他们都不想处理了。

[ 同一时间提交的代码已经合入 ]

[ 这个问题还是打开的 ]


如果哪天他们合入或者解决了,我再 append 新的进展。

]]>
两个人的数据开发团队,被要求从零开始治理企业数据 tag:www.v2ex.com,2025-04-29:/t/1128908 2025-04-29T07:53:13Z 2025-05-05T04:23:04Z IIIIZAYOI member/IIIIZAYOI 从互联网大数据岗位跳槽到制造业 ToB 公司,本以为能逃离“卷需求”,结果发现真正的噩梦是“没有需求”——只有领导的模糊概念和业务部门的“与我无关”😇

现在在这个公司,就感觉需求像个传话游戏:大老板说“要做数据驱动”,传到子公司 A 变成“随便给个看板”,子公司 B 直接装死,最后我们俩夹在中间,用 SQL 给领导造海市蜃楼…

建模跟尼马的侦探破案一样业务部门自己都说不清指标口径,问就是“大概和去年一样”,等开发完了才跳出来说“这数不对”(艹,你们倒是早说啊!)

要个数据像讨债一样,对方一句“系统老旧导不出来”就能打发我们.

最近领导又想起来要治理数据了,要求两个人的团队能集成全集团业务数据搞出体系化的数据建模.会上说了做不来,就要求我们参考其余制造业的经验,要我们去调研.我寻思哪家做的好的制造业能两个人搞数仓.....再说了,两个臭开发的咋能要到别人企业的内部搭建经验,头都裂开

有前辈指点下不?我现在到底该自上而下硬刚,还是自下而上偷跑?

]]>
MySQL 8.4 LTS 与 Metabase 奇怪兼容性问题:降级到 8.0.4 后问题解决 (1Panel and BT Panel 复现) tag:www.v2ex.com,2025-03-21:/t/1120026 2025-03-21T01:29:04Z 2025-03-21T04:45:30Z eveqvq982 member/eveqvq982 起源

在使用 Metabase 0.53.6 连接 1Panel 自带的 MySQL 8.4.4 时,出现数据库链接失败 API Health 测试失败

症状

环境

宿主机

容器类型

操作系统

面板

MySQL 版本

排查

  1. 初步怀疑 1Panel 问题

    • 重装 1Panel ,问题依旧。
    • 更换 LXC Template 为 Ubuntu 24.04 ,问题未解决。
  2. 尝试更换数据库

    • 尝试连接另外一台宝塔安装的 MySQL 8.0.0 ,连接正常。
  3. 怀疑 1Panel 镜像问题

    • 在另一台主机上安装宝塔,并部署 MySQL 8.4 LTS ,问题复现。
    • 确认问题可能与 MySQL 8.4 LTS 相关。
  4. 解决方案

    • 将 1Panel 自带的 MySQL 降级到 8.0.41 版本,问题解决。

总结

坑爹啊新版本 纯纯浪费时间 我还搜了一圈没人发相关内容

]]>
公司内网,怎么搭建主备 mysql,高可用。故障自动切。 不买云服务 tag:www.v2ex.com,2025-03-14:/t/1118327 2025-03-14T01:25:03Z 2025-03-13T17:25:03Z qbmiller member/qbmiller 类似阿里云、腾讯云的高可用 db 。
1. 怎么搭建高可用主备 mysql 。 一个链接 连接 db, 出问题时自动切到备库了。连接不变
2. 有简化版阿里云、腾讯云的系统吗。 开源的? 公司现在是 vmware 集群。相当于硬件组虚拟化出机器给我们用。也没个类似阿里云、腾讯云的页面操作化场景。

谢谢🙏 ]]>
mysql 自增 ID 突然变为 int 最大值问题 tag:www.v2ex.com,2025-03-07:/t/1116547 2025-03-07T01:26:20Z 2025-03-07T13:46:06Z vm97 member/vm97 阿里云 RDS mysql5.7 , 一个几百行的表,突然一条插入的记录自增 ID 成了 2147483647 ,已经排除了无限循环错误写入导致的 ID 自增溢出,或者在插入时错误的带入 ID 值,还有什么可能原因么?

]]>
覆盖还原 data 文件夹后, mysql 无法启动了 tag:www.v2ex.com,2025-02-23:/t/1113674 2025-02-23T15:16:54Z 2025-02-23T11:15:54Z werwer member/werwer net start mysql80 提示
MySQL80 服务正在启动 .
MySQL80 服务无法启动。

服务没有报告任何错误。

请键入 NET HELPMSG 3534 以获得更多的帮助。
请问要怎么办? ]]>
生产力工具 tag:www.v2ex.com,2025-02-18:/t/1112319 2025-02-18T06:35:53Z 2025-02-19T08:17:57Z sheaned member/sheaned 各位大佬,有个奇葩的技术问题 tag:www.v2ex.com,2025-02-17:/t/1112124 2025-02-17T11:57:21Z 2025-02-18T13:15:07Z ZeekChatCom member/ZeekChatCom 客户买了一套闭源的程序用于运营。MySQL 数据库用的是 CDB ,但是现在遇到一个问题:

因为那套程序对于数据库的优化明显不足,有一些很要命的慢查询拖慢整个库。于是,我们加了 2 个索引。性能问题暂时是解决了。

但是奇葩的是,这套程序会主动检测索引,然后给 DROP 掉。频繁的掉索引,我们就写了个定时任务去加索引。于是这套程序就是在不断的 add index 和 drop index, 因为刚开始频率不是很高,所以勉强能用。

但是最近每天的频率越来越高,导致不可用时间占比越来越多。到了无法忍受的地步。

我想的解决办法:给 CDB 这个用户去除索引的权限。但是程序会报错,无法运行。

现在想求教,有没有类似的中间件,可以在不修改代码的情况下,欺骗客户端,丢弃掉 drop index 的操作而不会报错?

]]>
关于 mysql trx_id 的疑惑 发帖一问 tag:www.v2ex.com,2025-02-14:/t/1111463 2025-02-14T06:38:10Z 2025-02-14T07:02:34Z qtxxm member/qtxxm 请教一个问题,

BEGIN; select * from sys_hosts; SELECT TRX_ID FROM INFORMATION_SCHEMA.INNODB_TRX WHERE TRX_MYSQL_THREAD_ID = CONNECTION_ID(); COMMIT; 

返回如下 +-----------------+ | TRX_ID | +-----------------+ | 421114694075176 | +-----------------+ 1 row in set (0.00 sec)

BEGIN; delete from sys_hosts WHERE id < 0; SELECT TRX_ID FROM INFORMATION_SCHEMA.INNODB_TRX WHERE TRX_MYSQL_THREAD_ID = CONNECTION_ID(); COMMIT; 

返回如下 +---------+ | TRX_ID | +---------+ | 1092017 | +---------+ 1 row in set (0.00 sec)

以上,只读事务中的 事务 id 是一个非常大的值 421114694075176 实际上如果数据库有写操作,得到的真实事务 id 是一个逐渐递增的值,比如这里 1092017,这个值会用于实际数据行中的隐藏列 trx_id

那么请问大佬们

  1. 只读事务 id 这个值数据库是怎么生成得到的?
  2. 是否可以认为,mysql 为了避免 trx_id 的浪费,只会在真实涉及到写操作的事务中,才生成真正的 trx_id
  3. 在 mysql trx_id 自增达到最大值时,各互联网大厂是怎么处理的?(这个值理论上足够用很久,是不是我想多了)
]]>
sql 性能讨论 tag:www.v2ex.com,2025-02-07:/t/1109614 2025-02-07T06:38:10Z 2025-02-08T15:57:26Z sheaned member/sheaned 那么如果只返回一条数据的情况下,select * 和指定字段性能上会有多大的区别呢? ]]> 数据库高频更新问题 谁遇到过没 有啥好的解决方案部 tag:www.v2ex.com,2025-02-06:/t/1109295 2025-02-06T04:00:16Z 2025-02-07T11:02:08Z 455035319 member/455035319 一个字段金额,一秒可能要更新上百次,就会卡顿死锁,应该怎么处理比较好

]]>
有用过 SyncNavigator 或者类似的简单数据库同步软件吗, tag:www.v2ex.com,2025-02-04:/t/1108846 2025-02-04T07:44:51Z 2025-02-04T23:12:15Z qazwsxkevin member/qazwsxkevin 老机器,源库 MySQL 5.6 ,没有开 binlog ,磁盘、网络接口 I/O 都很慢,整个库有 80 多 GB
目标数据库是 MySQL 8.0 ,新建的,
源数据库还在运行,也不是不能停,周末,源数据库一定会没有任何读写,或者寥寥几条

请问,SyncNavigator 这个软件能够在原数据库不停的情况下,
工作天开始同步,在周六日某个时候,源数据库和目标数据库内容完成一致同步吗?

如果 SyncNavigator 做不到,有什么软件“无需太多手工”可以做到?

]]>
mysql 遇到最愚蠢的查询性能问题,求解决 tag:www.v2ex.com,2025-01-14:/t/1105019 2025-01-14T07:36:37Z 2025-01-13T23:36:37Z godall member/godall mysql 8.0 Windows 版本。

有这么一个股市行情表:##

tb_quote ( op_date , code , price , ratio , hsl , index unique idx_1 (op_date,code) , index idx_2(code) ) 

每个交易日 6000 条,一年几百万条规模。

现在有一个简单需求:##

  1. 筛选某一天涨幅在( 3%,5%)区间的股票,且换手率在( 5%-10%)区间之间
  2. 查看后一天的股票涨跌情况。

实现语句很简单:

方案一: 第一条语句在 1 秒内返回结果:(20 条记录)

select code from tb_quote where op_date='yyyy-mm-dd' and ratio >3 and ratio <5 and hsl>5 and hsl <10 

嵌套第二条后:

 select a.* from tb_quote a join ( select code from tb_quote b where op_date='yyyy-mm-d1' and ratio >3 and ratio <5 and hsl>5 and hsl <10 ) t on a.code=t.code and a.op_date='yyyy-mm-d2' 

执行时间就超过 1 分钟!

** 查看 mysql 解释: **

  1. simple b,key idx_1 ,key_len=3,ref=const ,rows=s5373,filterd 0.05, Extra:using where
  2. simple a, key idx_2, key_len=30, ref=tb_quote.code, rows=465 ,filtered 0.21, Extra:using where

** 方案二: ** 但是如果把第一条语句的结果保存在一个表 tmp 里面,并且 code 建立普通索引以后,变成:

select a.* from tb_quote a join ( select code from tmp ) t on a.code=t.codeand a.op_date='yyyy-mm-d3' 

执行时间不超过 1 秒!!!

** 查看 mysql 解释:**

  1. simple a, key idx_1, key_len=3, ref=const, rows=5365 ,filtered 100, Extra:useing where
  2. simple tmp, key idx_code ,key_len=29,ref=a.f12 ,rows=1, filterd 100, Extra:using where

发现差别在:

  1. 次序不同,方案二子表 tmp 在前,方案一子表 b 在后;
  2. filtered 值不同,方案二是 100 ,方案一只有 0.05 ;

不知道 mysql 是怎么优化的?如果不用中间表过渡的话,应该怎么写 sql ?

]]>
有什么优雅的 mysql 增加字段名的方法呢? tag:www.v2ex.com,2025-01-09:/t/1104007 2025-01-09T14:11:23Z 2025-01-10T03:41:27Z jiaoguan1688 member/jiaoguan1688 线上现在运行的 mysql 里面的字段名需要增加一些,本地已经增加好了 如何加到线上版本比较优雅.

]]>
各位 Mysql 大佬,问一个 8.0 版本 json 的问题 tag:www.v2ex.com,2025-01-08:/t/1103625 2025-01-08T10:08:36Z 2025-01-08T13:18:40Z Vesc member/Vesc mysql online DDL 时间很长,咋整,数据量不多,就 30W tag:www.v2ex.com,2025-01-08:/t/1103619 2025-01-08T09:42:52Z 2025-01-15T23:08:53Z hhhhhh123 member/hhhhhh123 下面是说明和当时场景
mysql 版本 8.0+
当初设计的时候还是欠考虑了。 唉~
sql 中的 date() 函数用的时候一时爽, 现在头大。

我自己的 app 基本上所有的时间查询我都使用了 date 函数 QAQ
现在哭着改代码 QAQ ~
比如

select uid, balance, create_time from day_check_in where date(create_time) = date(%(入参时间)s) and uid = '123'; 

近期想优化接口,使用 EXPLAIN 一看头皮发麻, 虽然目前数据量不多,但是很难看。

当我翻看文档和搜索后发现 可以使用 online DDL 创建索引的时候 可以尽可能的不影响 CURD 操作,不过一些 特殊的 sql 还是会影响,会等待创建索引后才能执行一些查询。 不过这个问题不大,因为我可以避开这个时间段!

后面我执行了

ALTER TABLE balance_records ADD INDEX index_uid_create_time (uid, create_time) 

发现执行了 5 分钟还是没有执行成功。 使用 SHOW PROCESSLIST; 查看 sql 的运行情况,发现没有什么 sql 和创建索引 sql 冲突, 意味着 创建索引 sql 还在执行。

我以为是数据量大的原因, 当我把这个表所有的数据拷贝到 test 库中, 我执行了 创建索引的指令,结果 2 秒就执行完了。
我想知道为啥?
目前一直没有找到问题所在, 我已经尝试了两个表,拷贝的表单都是几秒钟就创建完成了! 唯独开发环境的表没有执行成功。
目前唯一能想到的办法就是在夜深人静的时候,进行停止服务,再执行创建索引操作,也不知道行不行。

有没有大佬知道 为啥我拷贝的表执行几秒钟就执行完了。

]]>
数据库中 select for update 和 version 乐观锁各自的适用场景是啥? tag:www.v2ex.com,2025-01-05:/t/1102681 2025-01-05T08:17:09Z 2025-01-05T14:36:34Z xianyukang member/xianyukang (0) 如题

(1) 比如转账/扣款相关的业务,推荐用悲观锁还是乐观锁?

(2) 脑补了如下的乐观锁实现,可以满足并发转账和取钱需求吗?

(3) 如果能,那么和悲观锁 select for update 作对比哪个更好?

# 数据库初始状态 TRUNCATE account; INSERT INTO account (id, name, balance, version) VALUES (1, 'ichigo', 10, 1), (2, 'rukia', 10, 1); # 并发事务 1 转出全部余额 START TRANSACTION; SELECT balance, version FROM account WHERE id = 1; SELECT version FROM account WHERE id = 2; UPDATE account SET balance = balance - 10, version = 2 WHERE id = 1 AND version = 1; UPDATE account SET balance = balance + 10, version = 2 WHERE id = 2 AND version = 1; COMMIT; # 并发事务 2 取出全部余额 START TRANSACTION; SELECT balance, version FROM account WHERE id = 1; UPDATE account SET balance = balance - 10, version = 2 WHERE id = 1 AND version = 1; COMMIT; 
]]>
mysql 宿主机没有办法访问的问题 tag:www.v2ex.com,2025-01-04:/t/1102450 2025-01-04T02:40:47Z 2025-01-04T15:22:18Z peitaobest member/peitaobest docker 中 mysql 的服务正常 root@Temak:/# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES fa56afd0a5c5 mysql:8.0.20 "docker-entrypoint.s…" 57 minutes ago Up 14 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql8 端口 3306 也没有被占用 root@Temak:/# sudo netstat -tuln | grep 3306 tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp6 0 0 :::3306 :::* LISTEN
宿主机 root@Temak:/# telnet 127.0.0.1 3306 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. 但是宿主机访问 docker 中的 mysql root@Temak:/# mysql -u root -p -h 127.0.0.1 -P 3306 Enter password: ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0 docker 中 mysql 的日志: 2025-01-04T02:18:41.937188Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.20) starting as process 1 2025-01-04T02:18:41.948132Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started. 2025-01-04T02:18:42.188458Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended. 2025-01-04T02:18:42.302034Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: '/var/run/mysqld/mysqlx.sock' bind-address: '::' port: 33060 2025-01-04T02:18:42.341277Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed. 2025-01-04T02:18:42.342798Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory. 2025-01-04T02:18:42.359459Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.20' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL. 请问大神如何解决宿主机访问 docker 中的 mysql

]]>
mysql 求助 tag:www.v2ex.com,2024-12-25:/t/1100311 2024-12-25T14:39:18Z 2024-12-25T23:16:48Z zzfredhhh member/zzfredhhh mysql 经常用一段时间之后开机之后无法自动开启,服务里面也找不到,去安装目录手动启动 mysqld.exe 和 mysql.exe 都是弹出黑框后无任何翻译,网上搜了很多方法(多是 csdn 的帖子)都不管用 ,无奈只能重装,但是隔一段时间就这样很烦人,有啥好的解决方法吗? :bili_001: :bili_001: :bili_001:

]]>
MySQL 8.4 MGR 可以上生产吗? tag:www.v2ex.com,2024-12-24:/t/1099981 2024-12-24T09:15:46Z 2024-12-26T07:04:29Z vczyh member/vczyh 准备做新版本

]]>
mysql 亿级数据,数据筛选和导入导出 tag:www.v2ex.com,2024-12-24:/t/1099915 2024-12-24T06:20:38Z 2024-12-24T08:27:34Z woduzibue member/woduzibue 请教一下各位大佬,
1. 这种操作通过哪种方式做会相对来说是最佳实践
2. 或者借用哪些工具会好一点
我当前想到的是做个批处理批量更新到另一张表中,
想问问论坛大佬们都还有哪些好点的做法,大厂里面都有哪些最佳实践 ]]>
大佬们你们 Mysql 的数据库名称怎么分割的? tag:www.v2ex.com,2024-12-13:/t/1097350 2024-12-13T08:39:39Z 2024-12-13T19:59:54Z PeiXyJ member/PeiXyJ 我公司数据库名称采用的是 小写 + 下划线 + 小写 例如 pj0001_prod,但是同事提出了异议说在某些软件使用下划线会出现异常(问了他什么软件又不说).

]]>
mysql 数据增量同步 tag:www.v2ex.com,2024-12-06:/t/1095406 2024-12-06T01:19:58Z 2024-12-06T09:58:56Z sxinsuoyu20 member/sxinsuoyu20 新项目准备启动, MYSQL 选择 8.4.2 这个版本,有没什么坑? tag:www.v2ex.com,2024-12-04:/t/1095057 2024-12-04T12:37:12Z 2024-12-04T19:42:45Z Alucns member/Alucns 但是又想尝试一下新版本! ]]> mysql 一年新增 800 多万条数据,如果是单表的话请问服务器能支撑吗?各位有什么好的办法吗? tag:www.v2ex.com,2024-12-04:/t/1094825 2024-12-04T00:56:20Z 2024-12-05T18:15:49Z sxinsuoyu20 member/sxinsuoyu20 1686*24*30*7=8,497,440 条数据,后期涉及到统计,分组排序等。
目前想到的办法是一年新建一张表,存储历史,然后做个配置表去管理查询哪张表。各位有在实际中遇到过相似问题的吗?有更好的办法吗? ]]>
新手求个远程数据库稳妥的解决方案~或者实时备份数据库的方法 tag:www.v2ex.com,2024-11-15:/t/1089759 2024-11-15T03:02:11Z 2024-11-15T02:02:11Z qingxia member/qingxia 铁子们,求助 docker 中 MySQL 导入数据库速度问题 tag:www.v2ex.com,2024-11-13:/t/1089328 2024-11-13T13:53:27Z 2024-11-13T18:45:58Z BV28 member/BV28 这是啥情况啊,Windows 本的磁盘我测单线程随机读写也有 100M 的,导入时 cpu 占用也不到 50%,感觉也不是 cpu 瓶颈啊。 ]]> 大家的 SQL 一般怎么管理? tag:www.v2ex.com,2024-11-06:/t/1087004 2024-11-06T01:03:24Z 2024-11-06T12:18:00Z miaeLKK member/miaeLKK
所以就导致编辑器界面有点混乱。之前看有的同事好像敲过的就保存一下,下次查询时先搜有没有这个 sql ,没有再敲。不过后面如果加条件的话,岂不也是混乱?还是说在另一个.sql 文件中? ]]>
询问一个慢查询的问题 tag:www.v2ex.com,2024-11-05:/t/1086732 2024-11-05T02:57:52Z 2024-11-05T22:19:50Z Jxnujason member/Jxnujason 假设有一张 software 表,表结构如下

software_id (int) author_id (int) create_time update_time
1 1 2024-11-05 11:00:00 2024-11-05 11:00:00
2 2 2024-11-05 11:00:00 2024-11-05 11:00:00

其中 software_id 是主键,author_id 是普通索引

还有一张 company_software 表,表结构如下

company_software_id (int) author_id (int) country(varchar) software_id (varchar)
1 1 china 1
2 1 china kkk

其中 company_software_id 是主键,author_id 、country 、software_id 是一个复合索引。

以上表数据量只有 1~5w 。

1 、SQL1

SELECT 1 FROM company_software AS company_software WHERE company_software.author_id = 1 and company_software.country in ('china', 'korea', 'england') and company_software.software_id = '1' 

并不会导致慢查询

2 、SQL2

SELECT software_id FROM sortware WHERE author_id = 1 and NOT EXISTS (SELECT 1 FROM company_software AS company_software WHERE company_software.author_id = 1 and company_software.country in ('china', 'korea', 'england') and CONVERT(sortware.software_id , char) = company_software.software_id) LIMIT 0, 100 

为什么会导致慢查询,懂的大佬帮忙分析下

]]>
现在用 mysql 的多 还是 mariadb 的多 tag:www.v2ex.com,2024-10-23:/t/1082775 2024-10-23T02:05:34Z 2024-10-30T17:07:54Z dzdh member/dzdh 只能通过 apt / yum 安装、升级。

]]>
关于 MySQL 查询咨询 tag:www.v2ex.com,2024-10-15:/t/1080432 2024-10-15T04:54:08Z 2024-10-14T16:54:08Z keepfun member/keepfun
因为两个 pod ,会同时查询等于 a 的,很可能后续同时查询等于 b 的。为了避免一个同时查询,我加了 shuffle 机制。

对于这个机制,我也是脑袋一热加的,当说出来大家讨论的时候,问会快么?我也懵逼了。

于是我写代码测试了下,逻辑是一批 id ,启动两个线程去查询,然后看耗时,结果 shuffle 的真的快一些。


对于这个结果,有人从原理上帮解析下么?或者我这个结论是错的? ]]>
请教个问题,如何快速的删除 mysql 的数据 tag:www.v2ex.com,2024-10-12:/t/1079610 2024-10-12T07:22:37Z 2024-10-13T01:40:04Z luxinfl member/luxinfl 是这样的,有张表 tableA,里面有 220 万条数据。 现在需要删除其中 130 多万条数据,而且这些数据还会有关联的业务表,通过 tableA 中的业务编号关联。 怎么才能快速清楚这些数据?直接 delete 的话应该会很慢的。 我看了执行计划,type=ALL,filter=100.00,extra=Using where

]]>
求助:Mysql 数据文件夹如何被新安装的 Mysql 读取 tag:www.v2ex.com,2024-10-10:/t/1078844 2024-10-10T04:59:55Z 2024-10-10T09:27:28Z Gabrielle70 member/Gabrielle70 我电脑 Mysql 装在 C 盘, 但是 Mysql 数据文件夹放在 D 盘.

现在 C 盘坏了, 我换了 1 块 C 盘后, 新装了 1 个同样版本的 mysql, 同时指定数据文件夹为原来的在 D 盘上的 Mysql 数据文件夹.

现在问题是 mysqlworkbench 链接 mysql 后死活不显示 D 盘上的数据库, 请大佬支招. 谢谢

谢谢

]]>
mysql 有没有什么中间件能模拟 mongodb? tag:www.v2ex.com,2024-09-28:/t/1076510 2024-09-28T03:52:51Z 2024-09-28T08:07:24Z blacklinux member/blacklinux 想要让一个 mysql 的库能用 mongodb 的客户端去连接并能简单的查询

]]>
请问 debian12 mysql5.7 可以通过添加 apt 源安装吗? tag:www.v2ex.com,2024-09-28:/t/1076483 2024-09-28T01:55:51Z 2024-09-30T17:10:20Z BeforeTooLate member/BeforeTooLate wget https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.32-1_all.deb
我查了 chatgpt 都是下面一步是在配置界面中,选择 "MySQL 5.7" 作为服务器版本,按 Enter 确认。
还是我姿势不对,找不到 5.7 选项么。最后安装下来都是 8.4 ]]>
大佬求助, mysql8.0.22 的漏洞哪里下载 tag:www.v2ex.com,2024-09-26:/t/1075883 2024-09-26T01:55:31Z 2024-09-26T09:52:03Z doyouknow member/doyouknow 1.不知道 mysql 的漏洞去哪下载
经过一顿搜索: https://www.oracle.com/security-alerts/cpujan2024.html
点击下载,然后输入账号显示让让填写 :*Support Identifier 这个有填不上正确的值

Connect your User Account
Next

We need to connect your user account to a Support Identifier. Access and privileges are approved by an Administrator in your organization. You need to add at least one Support Identifier to proceed.

2.我已经我能为力了 恳求大佬帮忙,小弟能力有限 ]]>
老生常谈 关于 子查询的应用 tag:www.v2ex.com,2024-09-23:/t/1074971 2024-09-23T02:32:22Z 2024-10-01T09:23:46Z wuhao1 member/wuhao1 select uid,(select wechat from member_a where tuid=m.tuid)wechat, (select name from admin_user where id =(select opuid from link where id=ldid))fzr ,no,ctime,(select ctime from member where id=uid)uctime, ldid,adid,rmb,(select count(id) from money_o where uid=m.uid and ctime < m.ctime)readin, (select count(id) from money_o where uid=m.uid and ctime > m.ctime)readout from money m where
ldid in(select id from link where qd=666 and ctime>$tms) and status=1 and ctime>=$czs having ctime> uctime and (ctime-uctime<480);

在后端程序中少不了要和 sql 接触,一部分人对子查询很抗拒认为 把很多逻辑都隐藏到 sql 中了不利于程序的可读性,然而 你同意吗?
上述 sql 使用了很多子查询,查询效率也并不会低,不过肯定可以省很多代码,因为很多数据如果不用子查询,那么就要多次链接数据库去做查询,然后组合数据。
愚见:适当的使用子查询其实是会更高效的!

]]>
ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86