xiehao3575563 2019-02-21 18:38 采纳率: 0%
浏览 414

mysql使用STRAIGHT_JOIN链接不走索引问题,大神留步啊

各位大神帮帮忙,有个问题难住了。student表和class表如图,student表中class_id属性有索引。
有两张表图片说明图片说明

执行这条sql:SELECT *
FROM test.student ts
STRAIGHT_JOIN test.class tc ON tc.id =ts.class_id;

有个奇怪的问题当student表数据大于class数据时,这条sql的执行计划显示链接不走索引,如图
图片说明

当student表数据量小于class表示,这条sql的执行计划的链接过程使用索引。
图片说明

请各位大神指教啊,在线等。。。小弟没有金币。。。

  • 写回答

1条回答 默认 最新

  • 憧憬blog 2023-03-15 08:50
    关注

    这个问题的原因很可能是由于 MySQL 查询优化器(optimiser) 在做查询优化时会根据表的数据量和统计信息(包括目录、数据等)来做决策,从而选择最优的查询计划。

    当 student 表数据较多时,MySQL 优化器选择了不使用索引的 STRAIGHT_JOIN 方式,可能是因为使用索引会导致昂贵的访问方式,特别是当需要多次查询、读取大量数据时,使用索引可能并不是最好的策略。但是,这个选择的策略会导致某些情况下查询变慢,这对于一些特定的业务场景可能会对系统性能造成不良影响。

    对于这种情况,我们可以通过优化查询条件,例如增加索引、改写 SQL 语句等来提高查询效率。同时,也可以使用一些工具和技术来监控和诊断查询性能,例如 MySQL 自带的慢查询日志(slow query log)、Percona Toolkit 等工具。

    在实际业务中,我们需要根据实际情况选择合适的查询优化策略,并不断进行优化和优化测试,确保系统可以在高并发、大数据量等压力下正常工作。

    评论

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料