【发布时间】:2015-04-02 00:24:20
【问题描述】:
我遇到了一个奇怪的问题,在我们将数据库从 MySQL 5.1.73 升级到 5.6.23 后,这个特定的 MySQL 查询的运行速度会慢近 50 倍。
这是 SQL 查询:
SELECT `companies`.*
FROM `companies`
LEFT OUTER JOIN `company_texts`
ON `company_texts`.`company_id` = `companies`.`id`
AND `company_texts`.`language` = 'en'
AND `company_texts`.`region` = 'US'
INNER JOIN show_texts
ON show_texts.company_id = companies.id
AND `show_texts`.`is_deleted` = 0
AND `show_texts`.`language` = 'en'
AND `show_texts`.`region` = 'US'
INNER JOIN show_region_counts
ON show_region_counts.show_id = show_texts.show_id
AND show_region_counts.region = 'US'
WHERE ( ( `companies`.`id` NOT IN ( '77', '26' ) )
AND ( `company_texts`.is_deleted = 0 )
AND `companies`.id IN (
SELECT DISTINCT show_texts.company_id AS
id
FROM shows
INNER JOIN `show_rollups`
ON
`show_rollups`.`show_id` = `shows`.`id`
AND ( `show_rollups`.`device_id` = 3 )
AND ( `show_rollups`.`package_group_id` = 2 )
AND ( `show_rollups`.`videos_count` > 0 )
LEFT OUTER JOIN `show_texts` ON
`show_texts`.`show_id` = `shows`.`id`
AND
`show_texts`.`is_deleted` = 0
AND
`show_texts`.`language` = 'en'
AND
`show_texts`.`region` = 'US'
AND
shows.is_browseable = 1
AND
show_texts.show_id IS NOT NULL
AND (
`show_rollups`.`episodes_count` > 0
OR `show_rollups`.`clips_count` > 0
OR `show_rollups`.`games_count` > 0
)
) )
GROUP BY companies.id
ORDER BY Sum(show_region_counts.view_count) DESC
LIMIT 30 offset 30;
现在的问题是,当我在升级前在 MySQL 5.1.73 中运行此查询时,查询只需要大约 1.5 秒,但升级到 5.6.23 后,现在可能需要长达 1 分钟。
所以我在 5.1.73 中对这个查询做了一个解释,我看到了这个:
放大版:http://i.stack.imgur.com/c4ko0.jpg
当我在 5.6.23 做 EXPLAIN 时,我看到了这个:
放大版:http://i.stack.imgur.com/CgBtA.jpg
我可以看到,在这两种情况下,都对 show 表进行了全面扫描(类型 ALL),但是否还有其他我没有看到的东西导致了 5.6 的大幅减速?
谢谢 是
【问题讨论】:
-
我看不懂那些解释计划 - 你会把它们粘贴为等宽文本吗?
-
请在 http:bugs.mysql.com 写一个错误报告;他们想知道新优化器比旧优化器更差的情况。
-
据我所知,第二个解释计划看起来比第一个更好
-
另外,可以通过分析检索其他有用的信息:dev.mysql.com/doc/refman/5.0/en/show-profiles.html。这两台服务器上的硬件是否完全相同?
-
对不起,图片看起来很小,但是如果您转到此处的直接网址,它们会更清晰:5.1:i.stack.imgur.com/c4ko0.jpg 5.6:i.stack.imgur.com/CgBtA.jpg
标签: mysql sql performance mysql-5.6 mysql-5.1