MySQL 在运行使用临时的查询时不会建立连接

标签 mysql temp-tables

我有一些类似于以下的 SQL:

select code, count(id) as count_total, count(distinct email) as 
count_distinct
from submissions where page_id = ?
group by code order by count_total desc

这不是最快的查询,因为提交表很大,并且有很多可能的电子邮件和代码,但它不需要经常运行,所以没关系。

但我的问题是,由于某种原因,当该查询运行时,MySQL 似乎不接受新连接。现有连接可以很好地完成任务,但在完成之前不会建立新连接。连接太多也不是问题,我的 max_connections 太低了,无论连接数量是少还是多,都会发生这种情况。

我觉得我基本上已经将范围缩小到使用临时,因为当我删除group by code时,它不再需要临时表,它就没有这个问题。

当该查询运行时,什么会导致 MySQL 不接受新连接?如果重要的话,该服务器位于 AWS RDS 上。

最佳答案

我相信,因为 Group by 想要聚合数据库的值,所以它将获取相同的写锁,否则结果可能会不一致。理想情况下,MySQL 仍应接受读取请求。

您甚至可以锁定一堆行,而无需通过使用虚拟 GROUP BY 子句将它们分组在一起来获取任何数据。

SELECT 1 FROM sometable WHERE somecondition GROUP BY 1 FOR UPDATE;

关于MySQL 在运行使用临时的查询时不会建立连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42163808/

相关文章:

mysql - 将 MS Access 连接到 MySQL

python - 如何使用Python数据集中的条件更新相同的字段?

mysql - 我可以将硬编码字符串与 MySQL LOAD DATA INFILE 中的列连接起来吗?

sql-server - SQL : use ID's in temp table to query another table

mysql 批量插入

mysql - sql 连接为维恩图

mysql - 高级 MySQL 查询,用于获取同一表中特定日期的记录

sql-server - SQL Server SELECT INTO 和临时表阻塞

sql - PostgreSQL : Find exceptions when using an in clause

sql-server - 在临时表上创建主键 - 何时?