首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL解释在不同的机器上给出不同的结果

问MySQL解释在不同的机器上给出不同的结果
EN

Stack Overflow用户
提问于 2021-03-01 23:16:56
回答 1查看 40关注 0票数 3

下面的查询在我运行它时会产生两个不同的结果,而不是同事运行它时:

代码语言:javascript
复制
explain select *
from `mydatabase`.`Transactions` as `transaction`
join `mydatabase`.`Documents` as `document` on `document`.`version` = `transaction`.`documentVersion`
join `mydatabase`.`DocumentTopics` as `documentTopic` on `documentTopic`.`documentId` = `document`.`documentId`
join `mydatabase`.`Topics` on `mydatabase`.`Topics`.`id` = `documentTopic`.`topicID`
where `mydatabase`.`Topics`.`id` in (1,2)
and `transaction`.`userHash` = 'xxxxx';

在我的机器上:

​

​

在我的同事机器上:

​

​

那么为什么它要在我的机器上执行全表扫描,而不是在我的同事机器上呢?

我们在Mac上使用的都是带有完全相同的数据库转储的dockerized MySQL 5.7.33。

这怎麽可能?

EN

回答 1

Stack Overflow用户

发布于 2021-03-01 23:20:55

优化器选择的索引是基于InnoDB为表和索引保存的统计信息。

这些统计信息是由InnoDB从表读取页的随机样本并推断索引基数之类的东西来定期生成的,因此它可以决定索引是否值得使用。

有时,统计数据是基于数据的不对称抽样,因此统计数据不具有代表性。

我建议您在两个MySQL容器中运行ANALYZE TABLE Transactions,然后再次尝试该实验。这条语句将使InnoDB根据新的随机页面样本刷新该表的统计信息。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66424731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档