我有一个数据库“algebra”,其中有一个表“questions”,有 1,033,990 行。这些记录有一个属性“solved”,它是 INT。我有一个简单的查询
select count(*) from questions where solved = 0
我有两台具有类似 CPU 的服务器。两台服务器上的表都相同。(数据库是生产数据库的副本)。它们位于 SSD 上。一台服务器装有 Ubuntu 14.04 和 MySQL 5.5.49,另一台服务器装有 Ubuntu 16.04 和 MySQL 5.7.12。
问题是,这个查询在 MySQL 5.5 上只需要 0.009 秒,但在 MySQL 5.7 上却需要 0.304 秒。慢了 34 倍!!!
查询计划大致类似:
服务器速度慢:
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
1 SIMPLE questions NULL index NULL by_topic_solved 97 NULL 1033990 10.00 Using where; Using index
快速服务器:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE questions index NULL by_topic_solved 97 NULL 1033989 Using where; Using index
为什么会出现这种情况让我很困惑。我见过这个新的 5.7 设置中存在其他更复杂的性能问题,但从底层查询的角度来看,这是最简单的问题。
我正在努力寻找对此的解释或从哪里开始。my.cnf 两者大致相似。任何建议都将不胜感激。
答案1
我完全理解了这个问题。变化的是,在新的 mysql 中,由于默认设置 query_cache_type = OFF,查询缓存被禁用。当我通过设置 query_cache_type=1 重新启用查询缓存时,更好的性能立即恢复。由于我的网站使用的 SELECT 查询比 INSERT/UPDATE 查询多 100 倍,因此使用查询缓存对我来说很有意义。感谢您指引我朝这个方向发展!