小编But*_*kus的帖子

为什么 DROP DATABASE 需要这么长时间?(MySQL)

新的 CentOS 安装。

我正在运行一个大型数据库(2GB sql 文件)的导入并且遇到了问题。SSH 客户端似乎失去了连接,导入似乎冻结了。我使用另一个窗口登录到 mysql 并且导入似乎已死,卡在特定的 3M 行表上。

所以我试过了

DROP DATABASE huge_db;
Run Code Online (Sandbox Code Playgroud)

15-20分钟后,什么都没有。在另一个窗口中,我做了:

/etc/init.d/mysqld restart
Run Code Online (Sandbox Code Playgroud)

DROP DB 窗口显示消息:SERVER SHUTDOWN。然后我实际上重新启动了物理服务器。

重新登录到 mysql,检查并且数据库还在那里,然后运行

DROP DATABASE huge_db;
Run Code Online (Sandbox Code Playgroud)

再一次,我已经等了大约 5 分钟。

再次,这是全新安装。这huge_db是唯一的数据库(系统数据库除外)。我发誓我之前和很快就放弃了这么大的 db,但也许我错了。

我已经成功删除了数据库。大约花了 30 分钟。另请注意,当我认为 mysqldump 导入已死时,我认为我错了。终端连接丢失,但我认为该过程仍在运行。我很可能杀死了导入中间表(3M 行表),并且可能杀死了整个数据库的 3/4。“top”显示 mysql 只使用了 3% 的内存,而看起来它应该使用更多内存,这是一种误导。

删除数据库最终需要 30 分钟,因此,我可能不必重新启动服务器,也可能只是等待 DROP 完成,但我不知道 mysql 会如何对获取 DROP 查询做出反应它通过 mysqldump 导入的同一个数据库。

尽管如此,问题仍然存在,为什么在删除所有 db 文件并从 information_schema 中删除对 DB 的所有引用时,DROP 2GB 数据库需要 30 分钟以上?有什么大不了的?

mysql mysqldump

55
推荐指数
2
解决办法
9万
查看次数

为什么将 `group_concat_max_len` 设置为低于最大值?

Ubuntu 12.04 上的 MySQL 5.5.28

如果结果比group_concat_max_len那么长,则结果将被优雅地截断。

目前我有一个脚本试图提前检查所需的长度并将其设置group_concat_max_len为足够大。

但是检查会增加额外的查询。仅设置group_concat_max_len为最大值有什么缺点吗?好处是查询更少。

mysql group-concatenation

12
推荐指数
1
解决办法
1万
查看次数

子查询单独运行非常快,但加入时非常慢

ypercube 解决了这个问题。子查询是完全没有必要的,整个事情都可以使用普通连接。不过,MySQL 的优化器无法使用我的原始查询仍然很奇怪。有关问题和许多详细信息,请参见下文。在我的问题底部加上一个完整的解决方案。它基于 ypercube 的答案。

每个子查询都非常快,不到 1 秒。加入了 5-6 个子查询(一些LEFT,一些INNER),时间增加到 400 秒。

我用于测试的整体查询仅返回 441 行。

我尝试将每个子查询放在“CREATE TABLE”查询中。每一个都在不到 1 秒的时间内完成。然后我使用那些新创建的表重新执行外部查询,它的运行时间也远低于 1 秒。所以连接没有实际问题。我id为我创建的表添加了索引。所有表都在匹配id= 上连接id

如何让 MySQL 高效地执行查询?我必须使用临时表吗?我已经编写了一堆 PHP 代码来将多个子查询连接放在一起,所以如果可能的话,我宁愿弄清楚如何使其工作。

我尝试使用“STRAIGHT_JOIN”关键字并删除外部ORDER BY. 这将查询时间减少到 90 秒。但我应该最多获得 1 秒。

我试过STRAIGHT_JOINORDER BY,花了 235 秒。所以看起来外部ORDER BY是一个主要的性能问题。

编辑:

使用临时表进行测试。查询运行速度非常快。但是必须有一种方法可以让 mysql 使用 JOINS 快速完成它。

此外,慢查询日志显示:

Rows_examined: 484006914
Run Code Online (Sandbox Code Playgroud)

4.84 亿行看起来像笛卡尔积。为什么要检查这么多行?

查询具有以下结构:

SELECT t0.`id`, t1.`length`, t2.`height`, t3.`family`
FROM
`products` t0
INNER JOIN
( …
Run Code Online (Sandbox Code Playgroud)

mysql join optimization subquery

7
推荐指数
1
解决办法
2万
查看次数