VisitとVisitMovementの2つのテーブルが1対多の関係にあります。つまり、1つのVisitには多くのVisitMovement行があります。私はすべての詳細フィールドを取り出してきたが、これらは、テーブル定義です:最新のレコードを1からManyへリレーションシップテーブル
CREATE TABLE [dbo].[Visit]
(
[VisitID] [int] IDENTITY(1,1) NOT NULL
)
CREATE TABLE [dbo].[VisitMovement](
[VisitMovementID] [int] IDENTITY(1,1) NOT NULL,
[VisitID] [int] NOT NULL
)
私が訪問し、最新のVisitMovement行からの詳細情報を返すために必要な多くの時間。
現在、私はこれらの2つのビューを持っていますが、時間が経つにつれてそれは遅くなっています。
たとえば、* vwGetVisitから*を選択した場合、VisitID = 1245の場合、戻すには数秒かかりますが、コストはvwLatestVisitMovementオブジェクトでほとんど上になります。
これを達成するにはどうすればよいでしょうか? VisitID
上
CREATE VIEW [dbo].[vwGetVisit] as
SELECT
V.*
VM.*
FROM
Visit V
INNER JOIN VisitMovement VM ON
V.VisitID = VM.VisitID
INNER JOIN vwLatestVisitMovement LVM on
VM.VisitMovementID = LVM.VisitMovementID
....many other joins including left joins....
CREATE View [dbo].[vwLatestVisitMovement]
AS
SELECT
VisitID,
max(VisitMovementID) as VisitMovementID
FROM
dbo.VisitMovement
GROUP BY
VisitID
列にVisitMovement' 'テーブルの上にA _single_インデックス' VisitId'昇順、 'VisitMovementId' _descending_べき助けて。これにより、内部結合で一致する行がすぐに見つかるようになり、最初の行が最新のものになります。 (注意:これは、 'VisitMovementId'が意味のある順序を提供することを前提としています。省略した列がある場合(MovementDateなど)、降順の列に置き換えてください。 – HABO
HABOに感謝します。その前はテーブル 'VisitMovement'でした。スキャン数2、論理読み取り1038、今のテーブル 'VisitMovement'。スキャン回数2、論理読み取り526。 – Philip
これは無効です。 LVM.VisitMovementIDに参加してVisitIDを無視します。 – Paparazzi