关于mysql查询时索引失效及扫描行数大于数据总行数的疑问。

发布于 2022-09-05 03:15:45 字数 389 浏览 16 评论 0

图片描述

数据表使用innodb引擎,updated_at 字段使用普通索引。

三个问题:

  1. 对比前两条语句,第二条没有使用索引,我记得是扫描行数达到一定行数时会放弃使用索引,这个临界值是多少呢?

  2. 全表扫描是显示扫描行数是 70341 行,而数据总行数却只有 57087 行?

  3. select count(*) 使用了索引,但是也扫描了 70341 行,这个语句会产生性能问题吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

天暗了我发光 2022-09-12 03:15:45
  1. CBO优化机制的数据库中,没有明确的使用或不适用索引的临界值,以执行计划中的COST最小为标准,经验值是取表总行数小于5%的时候用索引比较合适。

  2. 我理解第二个语句使用的是表的统计数据,如果表最近发生过比较大的变更,统计数据有没有及时更新,会出现两者偏差较大的情况。

  3. count(*)使用了索引,说明update_at字段有NOT NULL的定义,相比较全表扫描,扫描索引的成本会更低一些。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文