mysql - 为什么sql中的这个表连接类型是ALL?
问题描述
我正在尝试查询课程1分数优于课程2的学生。这是我的sql。
SELECT sc1.score C1Score, sc2.score C2Score,s.SId ID, s.Sname Name, s.Sage Age, s.Ssex Sex
FROM sc sc1 INNER JOIN sc sc2
ON sc1.SId = sc2.SId
AND sc1.CId = '01'
AND sc2.CId = '02'
AND sc1.score > sc2.score
INNER JOIN student s
ON s.SId = sc1.SId
;
而sql解释结果:
表student
连接类型为all。为什么当我说时要进行全表扫描:ON s.SId = sc1.SId
数据库结构:
解决方案
如果数据库在索引的帮助下搜索一行,它遵循以下步骤:
- 在索引中搜索行(“索引查找”)
- 使用索引中的信息循环表中的行(“查找”)
对于少量行,这些步骤非常快。但是,如果您必须经常这样做,它们就会加起来。对于返回表中所有行的查询,此方法退化为非常长的运行时间。
仅仅读取完整的表(“表扫描”)是相反的:它对于大量的行来说很快。您不必搜索,也不必进行查找。
根据经验,当一个数据库期望一个连接需要超过 100 次查找时,它更喜欢全表扫描。
推荐阅读
- java - Selenium webdriver中的sessionID如何在并行执行期间为每个浏览器实例获取不同的值
- prompt - 鱼壳:无法擦除功能
- azure - 主权云的 Azure AD B2B API 失败
- javascript - 修复了窗口调整大小时带有侧边栏位置的导航栏
- vue.js - 将数组作为未在其他组件上收到的道具传递
- scala - 我们可以通过保存 parquet 文件来复制 Spark 的 .cache() 行为吗?
- javascript - Javascript 计数器在滚动时开始
- python - NLTK:如何使用 python 在循环中获取数组的特定内容?
- node.js - Node.js 模块:导出异步函数
- javascript - 一起使用 onclick 函数和 href