SQL Server で次のクエリを高速化するには、本当に助けが必要です。現在、私はそれをビューとして持っていますが、それがビューなのか関数なのかは気にしません。レコードセットを MS Access インターフェイスに返すために必要なだけです。クエリの実行には 11 秒かかりますが、実行されるすべてのサイクルを考えると、3 秒以下にする必要があります。現在持っているビューにインデックスを付けようとしましたが、残念ながら、何かにインデックスを付けようとしている場合、AVG 関数を使用したり、HAVING 句を使用したりすることはできません。
SELECT tblFi.fldFN
,tblFc.fldFC
,tblFc.fldCity
,tblFc.fldState
,tblFi.fldIN
,tblAPL.fldPK
,tblAPL.fldCI
,AVG(tblAPD.fldND) AS fldND
FROM tblAPD
INNER JOIN tblAPL ON tblAPD.fldLK = tblAPL.fldLID
INNER JOIN tblUA ON tblAPD.fldUAK = tblUA.fldUAID
INNER JOIN tblUL ON tblUA.fldULK = tblUL.fldULID
INNER JOIN tblFi ON tblUL.fldFK = tblFi.fldFID
INNER JOIN tblFc ON tblFi.fldFAC = tblFc.fldFacID
GROUP BY tblFi.fldFN
,tblFc.fldFac
,tblFc.fldCity
,tblFc.fldState
,tblFi.fldIN
,tblAPL.fldPK
,tblAPL.fldCI
,tblAPL.fldPG
,tblAPD.fldIG
HAVING (tblAPL.fldCI <> 0)
AND (AVG(tblAPD.fldND) IS NOT NULL)
AND (tblAPL.fldPG = 1)
AND (tblAPD.fldIG = 0)
以下はテーブルです(クエリで参照される列の疑似名のみを含め、無関係なものについては fld1、fld2、fld3 を含めました)...
tblAPL
-- 450 万行、クラスタ化インデックスをオンfldLID
fldLID... INT
fld1... FLOAT
fldCI... FLOAT
fldPK... BIGINT
fldPG... TINYINT
fld2... TINYINT
fld3... TINYINT
fld4... NVARCHAR(15)
fld5... DATETIME
fld6... TINYINT
fld7... TINYINT
tblAPD
-- 1,200 万行、クラスタ化インデックスがオンfldDID
fldND... FLOAT
fldLK... INT
fldUAK... INT
fldIG... TINYINT
fld1... SMALLINT
fld2... SMALLINT
fld3... SMALLINT
fld4... NVARCHAR(20)
fld5... TINYINT
fldDID... INT
tblUA
-- 850,000 行、クラスタ化インデックスがオンfldUAID
fldULK... INT
fldUAID... INT
fld1... NVARCHAR(10)
fld2... INT
fld3... NVARCHAR(15)
fld4... INT
fld5... TINYINT
fld6... NVARCHAR(10)
fld7... INT
fld8... TINYINT
fld9...TINYINT
fld10...TINYINT
tblUL
-- 200,000 行、クラスタ化インデックスがオンfldULID
fldULID... INT
fldFK... INT
fld1... INT
fld2... INT
fld3... INT
fld4... NVARCHAR(15)
fld5... DATETIME
fld6... DATETIME