如果我们有一个简单的表(SQLite 语法):
CREATE TABLE Receptions (
ID INTEGER PRIMARY KEY AUTOINCREMENT,
ID_Patients INTEGER NOT NULL,
ID_Doctors INTEGER NOT NULL,
StartDateTime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP);
填充了一些 ID,为每个患者获取医生最新日期的最佳 SQL 查询是什么?是否可以以某种方式优化以下示例以使其运行更快?
SELECT ID_Patients pid, ID_Doctors did FROM Receptions INNER JOIN
(SELECT MAX(StartDateTime) maxDate, ID_Patients pid FROM Receptions GROUP BY pid) a
ON a.pid = pid AND a.maxDate = StartDateTime;
我想知道是否有人可以解释这个查询是如何执行的,以及在服务器端创建了哪些数据结构(假设有所有必需的索引)。
对于相关子查询,这可能会更快地工作:
SELECT r.*
FROM Receptions r
WHERE r.StartDateTime = (SELECT MAX(r2.StartDateTime)
FROM FROM Receptions r2
WHERE r2.pid = r.pid
);
为了提高性能,您需要在Receptions(pid, StartDateTime)
.
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句