您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

当连接到一个很小的/空的表时,尽管我使用的是“ IMIT”,为什么MySQL仍要进行完整扫描?

当连接到一个很小的/空的表时,尽管我使用的是“ IMIT”,为什么MySQL仍要进行完整扫描?

MysqL优化器将首先确定连接顺序/方法,然后检查对于所选择的连接顺序是否可以避免通过使用索引进行排序。对于此问题中的慢查询,优化器已决定使用“块嵌套循环”(BNL)连接。

当其中一个表很小(并且没有LIMIT)时,BNL通常比使用索引更快。

但是,对于BNL,行不一定按第一个表给出的顺序排列。因此,连接的结果需要在应用LIMIT之前进行排序。

您可以通过以下方式关闭BNL set optimizer_switch = 'block_nested_loop=off';

MySQL 2022/1/1 18:47:49 有273人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶