MySQL 5.7:'EXPLAIN'需要很长时间才能执行一个很长的'IN'列表

时间:2016-05-01 09:09:08

标签: mysql explain

在向MySQL DB发出SELECT COUNT(*)查询时,我们始终执行EXPLAIN查询并将其结果记录下来以进行调试。

我们的一些查询包含一个带有长列表值的IN子句(对于索引列,可能是100K +)。相关表包含~3M行,这些查询中没有连接。

所以,我发出了一对查询:

SELECT COUNT(*) FROM myTable WHERE col0 IN (v0,v1,...,v100000)
EXPLAIN SELECT COUNT(*) FROM myTable WHERE col0 IN (v0,v1,...,v100000)

col0varchar(100)的索引列。

现在,在从MySQL 5.5.33升级到5.7.12之后,我发现虽然SELECT COUNT查询本身的工作方式相同,但EXPLAIN查询需要很长时间(约45秒) 。对于100K值的列表,看起来增长是指数的)。在版本5.5中,它像所有其他EXPLAIN查询一样立即生效。

我在最新版本的MySQL的发行说明中找不到任何相关信息。

有谁知道:(1)由于某种原因,它是(已知的)错误还是预期的行为; (2)有没有办法通过配置标志等解决它?

提前致谢!

在这两个版本中,我们对标准my.cnf的唯一补充是:

innodb_buffer_pool_size = 6G

max_allowed_packet = 104857600 #to make such queries possible from the beginning

在5.7版中,我还添加了这个:

#Remove the 'ONLY_FULL_GROUP_BY','STRICT_TRANS_TABLES' modes from the list of SQL modes.
sql-mode="NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

0 个答案:

没有答案