我有一张用于统计项目的表格。
结构是这样的:
CREATE TABLE NewStatHistory (
StatHistoryID uniqueidentifier PRIMARY KEY NOT NULL,
DateEntered dateTime NOT NULL,
DateApplies dateTime NOT NULL,
WhoEnteredID uniqueIdentifier NOT NULL,
PostingID uniqueIdentifier NULL,
EnteredValue decimal(19,5) NOT NULL,
StatID uniqueIdentifier NOT NULL,
StatStatus int NOT NULL,
Notes varchar(500) NULL,
CampusID uniqueidentifier NOT NULL,
IsTarget bit NOT NULL DEFAULT 0
)
我需要为每个“DateApplies”提取最近输入的值。
此查询在 SqlServer 中几乎立即运行,但在 SQLite 中它只是超时,我不知道如何优化以使其工作。
SELECT NewStatHistory.*
FROM NewStatHistory
INNER JOIN (
SELECT MAX(DateEntered) entered, statID, DateApplies
FROM NewStatHistory
WHERE StatID = @statID
AND campusID = @campusID
AND IsTarget = 0
GROUP BY DateApplies, statID
) summary
ON summary.entered = newstathistory.dateEntered AND
summary.statID = newStatHistory.statID AND
summary.DateApplies = newStatHistory.DateApplies
WHERE NewStatHistory.StatID = @statID AND
IsTarget = 0 AND
campusID = @campusID
ORDER BY NewStatHistory.DateApplies DESC
任何人都对如何让它工作有任何想法。否则,我将不得不寻找另一个嵌入式数据库来使用。除了这个查询,SQLite 已经完成了我所要求的一切。
就索引而言,在 SqlServer 上,我只有主键索引。在 SQLite 上,我尝试仅使用主键,但随后在其他几列上添加无济于事。
子查询也在 SQLite 上立即执行,因此似乎是连接导致速度变慢。