統計プロジェクト用のテーブルがあります。
構造は次のようになります。
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でもあっという間に実行されるので、遅い原因はジョインのようです。