sql - 查询花费大量时间
问题描述
我有三个表 Student_details 和 Student_Marks 和 subject_Name。
主题名称
+----+------------------+
| ID | Sub_Name |
+----+------------------+
| 1 | Maths |
| 2 | Physics |
| 3 | Chemistry |
| 4 | Biology |
| 5 | Computer Science |
+----+------------------+
学生详情
+----+------------+-----------+-----+-------+--+
| ID | First_Name | Last_Name | Age | Class | |
+----+------------+-----------+-----+-------+--+
| 1 | Rohit | Sharma | 28 | 3 | |
| 2 | Shikhar | Dhavan | 27 | 2 | |
| 3 | Virat | Kohli | 29 | 3 | |
| 4 | MS | Dhoni | 30 | 2 | |
| 5 | Hardik | Pandya | 25 | 3 | |
+----+------------+-----------+-----+-------+--+
Student_Marks
+----+------------+------------+---------------+
| ID | Student_Id | Subject_Id | Subject_Marks |
+----+------------+------------+---------------+
| 1 | 1 | 1 | 90 |
| 2 | 1 | 2 | 82 |
| 3 | 1 | 3 | 85 |
| 4 | 1 | 4 | 75 |
| 5 | 1 | 5 | 92 |
| 6 | 2 | 1 | 90 |
| 7 | 2 | 2 | 82 |
| 8 | 2 | 3 | 85 |
| 9 | 2 | 4 | 75 |
| 10 | 2 | 5 | 92 |
| 11 | 3 | 1 | 90 |
| 12 | 3 | 2 | 82 |
| 13 | 3 | 3 | 85 |
| 14 | 3 | 4 | 75 |
| 15 | 3 | 5 | 92 |
+----+------------+------------+---------------+
我正在使用这个查询来获取结果。
select sd.First_Name
,sd.Last_Name
,sm.Subject_Id
,sm.Subject_Marks
from Student_Marks sm
inner join Student_details sd
on sm.Student_Id = sd.ID
where sm.Subject_Id in (select ID
from Subject_Name
where Sub_Name in ('Maths', 'Physics')
)
and Student_Id in (select ID
from Student_details
where class in (2,3)
);
现在,这个查询花费了太多时间来获得结果。
如何优化此查询?
编辑:
我正在使用休眠来获取结果,因此实际查询是:
select sd.First_Name
,sd.Last_Name
,sm.Subject_Id
,sm.Subject_Marks
from Student_Marks sm
inner join Student_details sd
on sm.Student_Id = sd.ID
where sm.Subject_Id in :SubName
and Student_Id in (select ID
from Student_details
where class in :ClassIds
);
解决方案
尝试这个 :
select sd.First_Name
,sd.Last_Name
,sm.Subject_Id
,sm.Subject_Marks
from Student_Marks sm
inner join Student_details sd on sm.Student_Id = sd.ID
inner join Subject_Name sn on sm.Subject_Id = sn.ID AND Sub_Name in ('Maths','Physics')
inner join Student_details on Student_Id = Student_details.ID AND class in (2,3)
推荐阅读
- mysql - Why is limit 0,1 slower than limit 0, 17
- google-bigquery - how to expire partitions of existing partitioned tables in BigQuery
- powershell - 如何在 O365 中对我的邮箱统计信息进行排序?
- python - Python - 确定类方法是否被覆盖或继承
- python - 在将数字更改为二进制的过程中列出 7 而不是 8
- python - 在 jupyter notebook 上激活环境返回“C:\Program”'不是内部或外部命令、可运行程序或批处理文件
- android - 弯曲文本 Jetpack 撰写
- spring-boot - 在 Kubernetes 中分配和维护顺序的 Worker-Number 或 NodeId
- elasticsearch - 从多节点elasticsearch集群创建快照,在单节点上恢复,分片红色
- mysql - mysql获取用户的所有表权限